xiaoyafeng has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks

I'm using Catalyst::View::JSON and Catalyst::TraitFor::Controller::jQuery::jqGrid to retrieve JSON data to front page. Below is the code concerned (copy much partially from Catalyst::TraitFor::Controller::jQuery::jqGrid example):

package UW::Controller::Site; use utf8; use Moose; use namespace::autoclean; BEGIN {extends 'Catalyst::Controller'; } with 'Catalyst::TraitFor::Controller::jQuery::jqGrid'; sub json : Local{ my ($self, $c) = @_; my $merchant_rs = $c->model('WindyDB::Merchant')->search({}); $merchant_rs = $self->jqgrid_page($c, $merchant_rs); my $row = 0; my @row_data; my $i = 0; while (my $mer = $merchant_rs->next){ $i ++; my $mer_id = $mer->mer_id; $c->log->debug($mer_id); my $single_row = { 'id' => $i, 'cell' => [ 'id' => $mer->mer_id, 'name' => $mer->mer_name, ], }; push @row_data, $single_row; } $c->log->debug( @row_data); $c->stash->{json_data}->{rows} = \@row_data; $c->stash->{current_view} = 'JSON'; }
But I found the format is a little weird :
{"current_view":"JSON","json_data":{"page":0,"records":"8","rows":[{id +:1, cell:["test1","6"]},{id:2, cell["test2","7"]}],"total":1}}
Actually, as jqGrid doument, data format should be:
{ total: "xxx", page: "yyy", records: "zzz", rows : [ {id:"1", cell:["cell11", "cell12", "cell13"]}, {id:"2", cell:["cell21", "cell22", "cell23"]}, ... ] }
Does That means "current_view" and "json_data" pairs are surplus? So is there a way to remove current_view and json_data before server ship? or does I use the modules incorrectly? I'm new to Catalyst and jqGrid, please help. Any replies are really appreciated!

UPDATE:

I use JSON module to create data for jqGrid manually, it display the data well.

I posted the similar question on stackflow first, but no answer. Maybe here is better place. ;)

closed! the author of the module gave me answer.





I am trying to improve my English skills, if you see a mistake please feel free to reply or /msg me a correction

Replies are listed 'Best First'.
Re: correct way to Catalyst::View::JSON?
by cragapito (Scribe) on Feb 09, 2015 at 23:31 UTC
    "closed! the author of the module gave me answer."

    Could you, please, tell what is the answer?

      I'm so shamed! Why am I so dumb! Sorry.

      I had found stackoverflow's answer from gdey:

      What JSON view are you using? It seems that it is converting everything in the stash (This is the default.) The JSON view needs to be configured to only convert things in json_data field of the stash. in your 'MyApp.pm' add something like: MyApp->config({ 'View::JSON' => { expose_stash => 'json_data' } }); replacing MyApp with the name of your application controller.

      But I was using the config in a inner controller while should be using in application controller.

      My first post, my first self humiliation (and almost 5 years late).