Frage

Ich fragte mich, ob jemand vielleicht einen kleinen Einblick in diese haben. jqGrid ist ganz zufrieden mit diesem JSON-String:

{'page':'1','total':1,'records':'4','rows':[{'id':1,'title':'Story Manager','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':2,'title':'Analysis','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':3,'title':'Narrative','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':4,'title':'Graphic','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'}]}

Jayrock (.NET JSON-RPC-Framework) liefert den JSON-String wie:

{id:'-1','result':{'page':'1','total':1,'records':'4','rows':[{'id':1,'title':'Story Manager','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':2,'title':'Analysis','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':3,'title':'Narrative','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':4,'title':'Graphic','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'}]}}

d. es fügt eine „{id:'-1','result':{ /* ... snip ... */ }}“ Wrapper um die Arbeits JSON.

Gibt es trotzdem die jsonReader Eigenschaft jqGrid an die richtige Stelle zu Punkt des JSON Ergebnis starten Parsen? Ich bin mit all dies ein Heck einer Zeit mit:)

--- edit ---

Ich wollte ein schnelles Beispiel ... vielen Dank für Ihre Antwort schreiben, Stuntz. Alles, was für das folgende Beispiel benötigt wird, ist .NET, Jayrock , jQuery und jqGrid . Dies funktioniert mit dem oben JSON. Ich vergesse, ob Sie den Inhaltstyp festlegen müssen.

var lastsel; // last row selected (for editing)      

jQuery(document).ready(function(){ 
    jQuery("#mygrid").jqGrid({ 
        contentType: "text/plain; charset=utf-8",
        datatype: function(postdata)
        {
            $.ajax({
                url: 'http://localhost:2064/StoryManager/StoryManager.ashx/getPageItemRoles?id=3',
                data: postdata,
                complete: function(response, status)
                {
                    if(status=='success')
                    {
                        var mygrid = jQuery("#mygrid")[0];
                        var o = eval("(" + response.responseText + ")"); // TODO don't use eval.  it's insecure, but older browsers support it...
                        mygrid.addJSONData(o.result);
                    }
                }
            })
        },                
        colNames:['ID', 'Title', 'Assigned To', 'Assigned', 'Due', 'Completed'],
        colModel:[
            {name:'id', label:'ID', jsonmap:'id', hidden: true,  editrules: { edithidden: true }},
            {name:'title', jsonmap:'title', editable: true},
            {name:'assignedto', label:'Assigned To', jsonmap:'assignedto', editable: true},
            {name:'assigned', jsonmap:'assigned', editable: true},
            {name:'due', jsonmap:'due', editable: true},
            {name:'completed', jsonmap:'completed', editable: true}
        ],
        jsonReader: {
            repeatitems: false
        }
    });  
});
War es hilfreich?

Lösung

Nein, Sie können das nicht über jsonReader. Intern werden die Gitter tun:

        ts.p.page = data[ts.p.jsonReader.page];

... das wird nicht funktionieren, für eine punktierte Unter Eigenschaft.

Stattdessen müssen Sie die Rasterdaten manuell auf eine Funktion, indem Datentyp holen. Sie können dann die Daten mit $ Schnipseln, holen und grid.addJsonData rufen, wenn sie zurückkommt, wie das Netz funktioniert, nur dass statt die gesamte Antwort von geben Sie eine Unter Eigenschaft der Antwort bestehen werden.

Andere Tipps

Dieser Beitrag und Links waren wirklich hilfreich. Ich habe nicht ein klares Verständnis darüber, wie das funktioniert, aber ich dachte, ich würde dies nur schreiben, jemand zu helfen, ihre Schmerzen zu lindern:)

Dies ist die Rückkehr JSON von getRecords:

  

{ "id": - 1, "Ergebnis": { "Seite": "1", "total": "1", "Aufzeichnungen": "2", "Zeilen": [{ "id": "13", "invdate": "2007-10-06", "name": "Client   3" , "Menge": "1000,00", "Steuer": "0.00", "total": "1000,00", "note": ""}, { "id": "12", "invdate": "2007 -10-06" , "name": "Client   2" , "Menge": "700.00", "Steuer": "140.00", "total": "840.00", "note": "nein   Steuer "}]}}

Und das ist der Arbeits Code:

jQuery(document).ready(function(){ 
    jQuery("#list4").jqGrid({ 
        contentType: "text/plain; charset=utf-8",
        datatype: function(postdata)
        {
            $.ajax({
                url: 'http://localhost/Booga/Baba.ashx/getRecords',
                data: "{}", // For empty input data use "{}",
                dataType: "json",
                type: "GET",
                contentType: "application/json; charset=utf-8",
                complete: function(response, status)
                {
                    if(status=='success')
                    {
                        var mygrid = jQuery("#list4")[0];
                        var o = eval("(" + response.responseText + ")");// TODO don't use eval.  it's insecure, but older browsers support it...
                        mygrid.addJSONData(o.result);
                    }
                }
            })
        },                
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
    colModel:[
        {name:'id',index:'id', width:55},
        {name:'invdate',index:'invdate', width:90, jsonmap:"invdate"},
        {name:'name',index:'name asc, invdate', width:100},
        {name:'amount',index:'amount', width:80, align:"right"},
        {name:'tax',index:'tax', width:80, align:"right"},      
        {name:'total',index:'total', width:80,align:"right"},       
        {name:'note',index:'note', width:150, sortable:false}       
    ],
        jsonReader: {
            repeatitems: false
        }
    });  
});

Übrigens, weiß jemand, warum eval unsicher ist? Schauen Sie sich den Kommentar zu meinem Code. Ich packte diesen Teil aus dem forum.asp Link.

  

d. es fügt eine "{id: '- 1', 'Ergebnis': {/ * ... schnipp ... * /}}" Wrapper um die Arbeits JSON

.

Dies ist ein Nebeneffekt des Weges JayRock SMD-Antworten verarbeitet ... die „id“ wird als „Antwortkennung“ und ist eine Hilfe für die asynchrone Kommunikation.

Also, wenn Sie eine Reihe von Asynchron-Anfragen abfeuern (und nicht warten, um für die Antwort), können Sie die „Anfrage-ID“ angeben und JayRock wird, dass ehren ... so können Sie die Antworten Linie mit die Anfragen.

Ich hoffe, dass ein wenig Sinn macht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top