2010-03-09 3 views
1

J'essaie de générer un jqgrid qui se remplit à partir d'un flux JSON, en étant sorti d'un backend django.jqgrid avec le rendu de l'entrée JSON vide

Le python qui traite la demande est la suivante:

from django.http import HttpResponse 
from django.utils import simplejson 
def json_test(request): 
    results = {'total':'1', 
       'page':'1', 
       'records':'2', 
       'rows':[{'id':'1','field1':'blah','field2':'bleh'}, 
      {'id':'2','field1':'bloo','field2':'blum'}]} 
    json = simplejson.dumps(results) 
    return HttpResponse(json, mimetype='application/json') 

Alors allez http://127.0.0.1:8000/json_test/ renvoie les éléments suivants:

{"records": "2", "total": "1", "rows": [{"field2": "bleh", "field1": "blah", "id": "1"}, {"field2": "blum", "field1": "bloo", "id": "2"}], "page": "1"} 

Le code jquery se présente comme suit:

<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    jQuery("#list").jqGrid({ 
    url:'http://127.0.0.1:8000/json_test/', 
    datatype: 'json', 
    mtype: 'GET', 
    colNames:['field1','field2'], 
    colModel :[ 
     {name:'field1', width:55}, 
     {name:'field2', width:90}, 

    ], 
    pager: '#pager', 
    rowNum:10, 
    rowList:[10,20], 
    sortname: 'field1', 
    sortorder: 'desc', 
    viewrecords: true, 
    caption: 'Test Grid' 
    }); 
}); 
</script> 

sur chargement de la page, la grille affiche correctement, et il affiche brièvement 'loading dat a ', mais il n'affiche aucune ligne.

Des idées où je me suis trompé? J'ai essayé de ramener cela à un cas aussi simple que possible pour en déterminer la cause.

+0

toute erreur dans Firebug? –

+0

pas d'erreurs dans firebug, et il montre le fichier json comme étant retourné avec succès en 23ms – meepmeep

Répondre

0

Résolu - J'ai mis la page html à l'intérieur de l'application django, de sorte que l'URL jqgrid est devenue url:'/json_test/' et ensuite cela a fonctionné. Doit être quelque chose codé dans jqgrid qui ne permet que des URL locales?

1

Selon le jqGrid Documentation, par défaut, la grille des données JSON attend dans le format suivant:

 

{ 
    total: "xxx", 
    page: "yyy", 
    records: "zzz", 
    rows : [ 
    {id:"1", cell:["cell11", "cell12", "cell13"]}, 
    {id:"2", cell:["cell21", "cell22", "cell23"]}, 
     ... 
    ] 
} 
 

Donc, fondamentalement, il semble que vous devez définir un ID pour chacune de vos colonnes. Si cela n'est pas possible, vous devrez spécifier votre propre jsonReader. De plus, avoir vos sections total/page/enregistrements dans le désordre pourrait causer des problèmes - si vous avez encore des problèmes après avoir ajouté les ID, alors ce serait la prochaine chose à regarder.

+0

J'ai ajouté dans les identifiants (code édité pour refléter cela) et toujours pas de joie. Comment puis-je forcer Python à retourner le JSON dans l'ordre codé? – meepmeep

+0

C'était juste une observation, je ne suis pas sûr si cela va causer des problèmes ou non. Comme un test rapide, il suffit de renvoyer une chaîne codée en dur dans le bon ordre et voir si cela résout le problème. Ensuite, une solution peut être élaborée. –

0

essayer ...

ChargeErreur: function (XHR, état, erreur) {alert (état + » « + erreur);}