[Catalyst] DBIC <-> JSON conversion for AJAX

Roland Philibert rphilibert at aptina.com
Mon Sep 12 12:01:42 GMT 2011


Hello all,

 

I am new to Catalyst, so I will try to make this query as smart as I
possibly can.

 

I am trying to fetch data from a mysql database using a jQuery ajax
method to populate a select list...and my question is:  what is the
recommended method in Catalyst to serialize/encode a DBIC class object
into a JSON object, that I can then parse easily in a view with
javascript?

If anyone is able to help, an example would be highly appreciated.

 

Many thanks

Roland

 

Ps: I have had an attempt with JSON::XS, but I don't think it is correct
as I had to bless manually the conversion. 

Not sure here that my approach is correct... I am thinking that perhaps
the conversion should be done within the model itself?

 

Here is the way I think how the mechanics work with Catalyst, but my
conversion does not return anything.

 

1./ in a TT view, I use the Jquery .ajax function to connect to a method
(list_ajax) under the iprequest controller  eg:

                  $("#convenient")

                                 .click(function(){

                                $.ajax({

                                                type: "GET"

                                                                ,url:
"[% c.uri_for("/request/list_ajax") %]"

                                                                ...

 

 

2./ the method gets the data from my database using a DBIC model ...but
I encode it into a JSON object and stash it to the contents. (At this
point here I am experimenting!)

sub list_ajax :Local {

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

                                my $encoder = encode "UTF-8",
JSON::XS->new->allow_blessed(1)->convert_blessed(1)->encode($c->model('D
B::request')->all);

                                $c->stash(ajax_request => [$encoder]);

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

                }

                

 

3./ Coming back to my point 1 above, I get the contents with my ajax
function by adding (in blue):

                  $("#convenient")

                                 .click(function(){

                                $.ajax({

                                                type: "GET"

                                                                ,url:
"[% c.uri_for("/iprequest/list_ajax") %]"

 
,dataType: "json"

                                                                ,cache:
false

 
,success: function(json){

 
if(json.ajax_request) {

 
$('<p>I got something to show..</p>').appendTo('.reuseable);

 
$.each(json.ajax_request, function(i,n) {

 
var item = json.ajax_request[i];

 
$('<p>'+ item +'</p>')

 
.appendTo('.reuseable');

 
});

                                

 
}

 
else {

 
$('.reuseable').html('<p>no result sorry..</p>');

 
$('.reuseable').show();

 
}

                                                                }

                                                });

                                });

                ....

 

 


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.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20110912/637f8e60/attachment.htm


More information about the Catalyst mailing list