Hi Will,

In your previous suggestion you had:

 

                while ( my $rec = $rs->next ) {

                                my %fields = $self->get_important_values( $rec 
);

                                push @{ $json->{data} }, { %fields );

                }

 

...what is "get_important_values"? How to make sure that all the resultset is 
transferred to $json.

 

Thanks for you help.

R

 

 

 

From: will trillich [mailto:will.trill...@serensoft.com] 
Sent: 26 April 2012 14:02
To: The elegant MVC web framework
Subject: Re: [Catalyst] TT via AJAX

 

Roland --

 

The main thing is, a resultset isn't your data, it's a way to *get to* your 
data. At some point your process needs to iterate thru the rows that your 
recordset would return, and that's the part you want in your data.

 

It's not that you're rebuilding the data structure, you just want to get the 
data you need, omitting the other housekeeping items that would clutter up your 
results (and take time to encode).

 

E.g.

 

  DB<3> |x $rs

0  DBIx::Class::ResultSet=HASH(0xc1e8460)

   '_result_class' => 'WT::Model::Model::Master'

   'attrs' => HASH(0xc239ed8)

      'alias' => 'me'

      'where' => HASH(0xc1e55e0)

         'ix' => '-1'

   'cond' => HASH(0xc1e55e0)

      -> REUSED_ADDRESS

   'pager' => undef

   'result_source' => DBIx::Class::ResultSource::Table=HASH(0xbbaa400)

      '_columns' => HASH(0xbbaa7c0)

         'cat' => HASH(0xbb74b30)

            'data_type' => 'VARCHAR'

            'default_value' => undef

            'is_nullable' => 1

            'size' => 8

         'class' => HASH(0xbb74cb0)

            'data_type' => 'VARCHAR'

            'default_value' => undef

            'is_nullable' => 1

            'size' => 4

...snip...300 or more lines later...snip...

               'sqlt_deploy_callback' => 'default_sqlt_deploy_hook'

         'storage' => DBIx::Class::Storage::DBI=HASH(0xbba4470)

            '_connect_info' => ARRAY(0xb9ae738)

               0  HASH(0xac9f618)

                  'dsn' => 'dbi:mysql:dbname=wt'

                  'password' => 'sekrit-goeth-thither'

                  'user' => 'blahyaddablah'

            '_dbh_details' => HASH(0xbba78b0)

                 empty hash

            '_dbh_gen' => 0

            '_dbi_connect_info' => ARRAY(0xab32940)

               0  'dbi:mysql:dbname=wt'

               1  'blahyaddablah'

               2  'sekrit-goeth-thither'

               3  HASH(0xab32860)

                  'AutoCommit' => 1

                  'PrintError' => 0

                  'RaiseError' => 1

                  'ShowErrorStatement' => 1

            '_dbic_connect_attributes' => HASH(0xab32860)

               -> REUSED_ADDRESS

            '_in_dbh_do' => 0

            '_sql_maker' => undef

            '_sql_maker_opts' => HASH(0xbba78d0)

                 empty hash

            'savepoints' => ARRAY(0xbba4480)

                 empty array

            'schema' => WT::Schema=HASH(0xb93e380)

               -> REUSED_ADDRESS

            'transaction_depth' => 0

      'source_name' => 'Master'

      'sqlt_deploy_callback' => 'default_sqlt_deploy_hook'

 

Encoding all that recordset background gunk as JSON is not going to be useful. 
You just need your data, and $rs->next() is a clean way to get at that.

 

 

 

On Thu, Apr 26, 2012 at 7:21 AM, Roland Philibert <rphilib...@aptina.com> wrote:

Hi Will,

Thanks for this, am not sure I understand though..

I don't really want to re-build the datastructure as the resultset $rs contains 
all relationships used by the template.

What I want to achieve is send back $body (from my rendered TT) via JSON back 
to my $.ajax.

Any example on how to this and I'd be very grateful.

 

Thanks.

 

From: will trillich [mailto:will.trill...@serensoft.com] 
Sent: 25 April 2012 14:53
To: The elegant MVC web framework
Subject: Re: [Catalyst] TT via AJAX

 

Roland --

 

Assuming your JSON view is trying to encode the 'result' item from your stash, 
first let's see why encoding a blessed object is fraught with peril.

 

Try running your server in debug mode, and when you get to the ->stash() line, 
try "x $rs". You really want all that JSON-encoded?

 

Blessed objects (such as a recordset or a request or a response) typically 
contain many, many layers that are often going to be overkill when encoding 
stuff as JSON, when really you just want a few top-level items.

 

So you should iterate through your objects and/or collections and create a 
hashref that contains plain primitives (or maybe a few more hashrefs or 
arrayrefs when needed) instead of asking JSON to translate blessed objects that 
are dozens of layers deep.

 

Instead of doing ...->stash( result => [ $rs ] ) build your own data structure, 
by doing something like

 

my $json = {

  data => [],

  count=> $rs->count,

  other => $self->blah,

};

while ( my $rec = $rs->next ) {

  my %fields = $self->get_important_values( $rec );

  push @{ $json->{data} }, { %fields );

}

$c->stash( result => $json );

 

 

 

On Wed, Apr 25, 2012 at 8:26 AM, Roland Philibert <rphilib...@aptina.com> wrote:

Hello all,

I'd like to render some HTML content being formatted from a  TT view via AJAX.
Can anybody recommend a way to do that please?

 

The method I am using now for AJAX  is REST controller and JSON View.

 

...

sub ajaxaction :Local :ActionClass('REST') {}

 

sub ajaxaction _GET {

 

                my ($self, $c) = @_;

                my $rs =  $c->model(DN)->resultset(Table)->find(...);

                my $body = 
$c->view(MYTT)->render($c,'dir/temp.mailtt',$c->stash( result  => [ $rs ] )); ß 
this is the weird bit I guess.

                my @content =();

                push @content, $body;

                $self->status_ok(

                        $c,

                        entity => \@content,

                );

}

sub end :Private {

        my ($self, $c) = @_;

        $c->forward("View::JSON");

}

 

..but doing this I get the error:

 

Caught exception in MyApp::View::JSON->process "encountered object 
'MyApp::Model::DB::Table=HASH(0xdb2c330)', but neither allow_blessed nor 
convert_blessed settings are enabled at (eval 1606) line 151."

 

Thanks for your help.

Roland

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Aptina (UK) Limited, Century Court, Millennium Way, Bracknell, Berkshire, RG12 
2XT. Registered in England No. 06570543.
 
This e-mail and any attachments contain confidential information and are solely 
for the review and use of the intended recipient. If you have received this 
e-mail in error, please notify the sender and destroy this e-mail and any 
copies.
 


_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/





 

-- 
"We act as though comfort and luxury were the chief requirements of life, when 
all that we need to make us happy is something to be enthusiastic about." -- 
Albert Einstein

Aptina (UK) Limited, Century Court, Millennium Way, Bracknell, Berkshire, RG12 
2XT. Registered in England No. 06570543.
 
This e-mail and any attachments contain confidential information and are solely 
for the review and use of the intended recipient. If you have received this 
e-mail in error, please notify the sender and destroy this e-mail and any 
copies.
 


_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/





 

-- 
"We act as though comfort and luxury were the chief requirements of life, when 
all that we need to make us happy is something to be enthusiastic about." -- 
Albert Einstein


Aptina (UK) Limited, Century Court, Millennium Way, Bracknell, Berkshire, RG12 
2XT. Registered in England No. 06570543.

This e-mail and any attachments contain confidential information and are solely 
for the review and use of the intended recipient. If you have received this 
e-mail in error, please notify the sender and destroy this e-mail and any 
copies.

_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to