2016-04-22 10 views
-1

Ich verwendete diesen Code für APIs, die mit eckigen Klammern umgeben waren und es funktionierte. Allerdings ist es nicht für eine API arbeiten, die wie folgt aussieht:jqGrid liest JSON ohne Quadrat-Brakcets nicht

{"name":"Summer Tire","description":"Premium Summer Tires.","notes":"Good price","supplier":"Tire Systems","price":79,"currency":"EUR","ID":2} 

Hier ist mein Code:

function loadMaterialDetails(id) { 
    $("#materialDetails").jqGrid("GridUnload"); 

    $("#materialDetails").jqGrid({ 
     url: url, 
     mtype: "GET", 
     datatype: "json", 
     colModel: [ 
      { label: 'Material ID',  name: 'ID', key: true, width: 1 }, 
      { label: 'Material Name', name: 'name', width: 2 }, 
      { label: 'Supplier',  name: 'supplier', width: 2 }, 
      { label: 'Description',  name: 'description', width: 3 }, 
      { label: 'Notes',   name: 'notes', width: 1 }, 
      { label: 'Price',   name: 'price', width: 1 }, 
      { label: 'Currency',  name: 'currency', width: 1 } 
     ], 
     viewrecords: true, 
     width: 780, 
     height: 250, 
     rowNum: 20, 
     onSelectRow: function(id){ 
      alert(id); 
    } 
}); 

UPDATE ich es aufgegeben. Wenn ich weiß, dass nur eine Zeile jemals erworben werden kann, hole ich sie mit getJSON und manipuliere sie manuell. Danke für deine Eingabe!

+0

Das Raster erfordert ein Array von Zeilen, die zurückgegeben werden sollen. Offenbar gibt Ihre API nur eine einzelne Zeile zurück. – Cerbrus

+0

Ich sehe das, aber kann ich es irgendwie zwingen, eine einzelne Zeile anzuzeigen? – Haruspik

+0

Wie sieht Ihr Backend-Code aus? – madalinivascu

Antwort

1

Während answer Werke Oleg, es unvollständig ist.

Diese Versuchen:

jsonReader: { 
    root: function (obj) { 
     return obj instanceof Array ? obj : [obj]; 
    } 
} 

Dadurch wird sichergestellt, dass das Gitter arbeiten wird fortgesetzt, wenn die zurückgegebenen Daten ein Array von Zeilen ist, und gleichzeitig ermöglicht es die einreihige/Objekt zu rendern.

+0

Ich schlug dir vor, '$ .isArray (obj) zu verwenden? obj: [obj]; 'und du hast es in 'obj instanceof Array' geändert? obj: [obj]; '. Ich sehe keinen wirklichen Vorteil: Es ist dasselbe. Entschuldigung, für Missverständnis, wer der Besitzer der Frage ist. Beim nächsten Mal schreibe bitte etwas wie "es ist Kamil Sucharskis Frage", anstatt "das ist NICHT MEINE FRAGE" zu wiederholen, die mehr Bedeutung haben. :-) – Oleg

+1

Ich wollte deinen Code nicht wirklich kopieren, @Oleg. Das zweite Mal, als ich sagte: "Das ist nicht meine Frage", hätte ein Hinweis genügen sollen, dass ich die Frage nicht geschrieben habe. – Cerbrus

+0

"Das ist nicht meine Frage" habe die Bedeutung "Du antwortest nicht, was ich gefragt habe" und nicht nur "eine andere Person stellte die Frage". Ist das nicht so? – Oleg

-2

Alles ist möglich. Sie müssen jsonReader mit root als Funktion definiert hinzuzufügen:

jsonReader: { 
    root: function (obj) { 
     return [obj]; 
    } 
} 

Siehe Demo https://jsfiddle.net/OlegKi/kLsqk8gc/, die die Ergebnisse wie

enter image description here

AKTUALISIERT zeigt: ich vor in der entsandte kleine Änderungen hinzuzufügen vergessen Diskussion, die jetzt gelöscht wird. Wenn die Antwort nicht immer in dem Objekt, kann aber korrekt (Array zu) sein, dann kann man nur verwenden:

jsonReader: { 
    root: function (obj) { 
     return $.isArray(obj) ? obj : [obj]; 
    } 
} 
+0

** Moderator Hinweis: ** Kommentare entfernt. Kommentare zu Fragen/Antworten sollten konstruktiv, zivil und nur zu Klarstellungszwecken verwendet werden. Vielen Dank. –

+0

@ JonClements: Danke! – Oleg