2012-05-02 3 views
0

Je travaille sur jqGrid, le JSON retour estjqGrid addJSONData ne fonctionne pas

{"total":1,"page":1,"records":2,"rows":[{"projectId":"1022","name":"john"}]} 

puis dans la fonction que j'appelle

var jsongrid = eval("("+data+")");     
var thegrid = jQuery("#projectList")[0];      
thegrid.addJSONData(jsongrid); 

mais il me donne l'erreur: l'objet est nulle ou non définie . Je ne sais pas pourquoi. Je n'ai pas utilisé json reader. BTW, savez-vous comment utiliser la méthode set pour définir "total", "page", "records"?

Répondre

2

Je suppose que vous essayez d'appeler addJSONData méthode avant la grille sera créée à l'égard de jQuery("#projectList").jqGrid({...});

L'utilisation de addJSONData est pratiquement toujours inutile (voir un de mes premiers messages sur le sujet here). De la même manière, vous ne devriez jamais utiliser la méthode eval qui est mauvaise. On utilise jQuery.parseJSON ou JSON.parse à la place. Je suppose que vous devriez utiliser datatype: 'json' pour résoudre votre problème. Vous devriez poster plus de code pour vous montrer comment vous devriez utiliser les autres options de jqGrid dans votre cas.

MISE À JOUR: De votre question précédente, il semble que vous voulez simplement envoyer des données supplémentaires au serveur à partir du formulaire en cliquant sur le bouton "Rechercher". Dans le cas, je vous suggère de modifier le code à ce qui suit

var $grid = $("#projectList"); 

$grid.jqGrid({ 
    url: 'user595234.json', 
    datatype: "json", 
    serializeGridData: function (data) { 
     return $.param(data) + '&' + $("#project_search_form").serialize(); 
    }, 
    jsonReader: {id: "projectId", repeatitems: false}, 
    colNames: ['ID', 'Name'], 
    colModel: [ 
     {name: 'projectId', width: 255}, 
     {name: 'name', width: 255} 
    ], 
    rowNum: 10, 
    rowList: [10,20,30], 
    pager: '#projectPager', 
    sortname: 'projectId', 
    viewrecords: true, 
    sortorder: "desc", 
    caption: "Simple data manipulation", 
    height: "auto" 
}).jqGrid("navGrid", "#projectPager", {edit: false, add: false, del: false}); 

$("#search").click(function() { 
    $grid.trigger("reloadGrid", [{page: 1}]); 
}); 

Dans the demo Je viens d'obtenir la forme de l'exemple de l'utilisation jQuery.serialize et le modifier un peu. Il affiche les données dont vous avez besoin

enter image description here

De plus, comme vous pouvez le vérifier facilement en ce qui concerne des Fiddler ou Firebug, l'URL ba jointe avec des paramètres supplémentaires comme ci-dessous

...?_search=false&nd=1336057299806&rows=10&page=1&sidx=projectId&sord=desc&a=1&b=2&c=3&d=4&e=7&f=8 

Les paramètres standards

_search=false&nd=1336057299806&rows=10&page=1&sidx=projectId&sord=desc 

sera ajouté avec les paramètres de la forme

a=1&b=2&c=3&d=4&e=7&f=8 

Dans certains scénarios, on peut utiliser alternativement jQuery.serializeArray. Il permet de sérialiser les données dans un autre format (comme JSON) ou convertir les données dans un autre format (voir here) qui peut être facilement fusionné avec les paramètres jqGrid standard en utilisant $.extend.

+0

plus de détails est ici http://stackoverflow.com/questions/10393256/jqgrid-not-display-properly – user595234

+0

@ user595234: J'ai mis à jour ma réponse. – Oleg