18 Stimmen

jQuery.ajax() + leeres JSON-Objekt = Parse-Fehler

Ich erhalte einen Parse-Fehler, wenn Sie jQuery verwenden, um einige JSON-Daten zu laden. Hier ist ein Ausschnitt aus meinem Code:

jQuery.ajax({
    dataType: "json",

    success: function (json)
    {
        jQuery.each(json, function ()
        {
            alert(this["columnName"]);
        });
    }
});

Ich erhalte keine Fehler beim Parsen eines nicht leeren JSON-Objekts. Also meine Vermutung ist, dass das Problem mit meinem Serialisierer ist.

Die Frage ist: Wie formatiere ich ein leeres JSON-Objekt, das jQuery nicht als missgebildet betrachtet?

Das habe ich bis jetzt versucht, ohne Erfolg:

{[]}

{[null]}

{}

{null}

{"rows": []}

{"rows": null}

{"rows": {}}

UPDATE:

Ich kann verstehen, dass ich mich etwas vage ausgedrückt habe - lassen Sie mich versuchen, das zu klären:

Parsing des JSON-Objekts ist nicht das Problem hier - JQuery ist - ich denke.

jQuery löst einen Parse-Fehler aus (ruft die Fehlerfunktion auf). Es scheint, dass die interne JSON-Validierung von jQuery keines der zuvor genannten Objekte akzeptiert. Nicht einmal die gültigen Objekte.

Die Ausgabe der Fehlerfunktion ist:

XMLHttpRequest: XMLHttpRequest readyState=4 status=200
textStatus: Parser-Fehler
errorThrown: undefiniert

Dies gilt für alle vorgenannten Objekte.

0 Stimmen

Das ist das Problem mit Teilmengen, sie haben nicht alles.

0 Stimmen

Alle außer Ihrem 3. Beispiel sind kein gültiges JSON, da es keinen Schlüssel im Wörterbuch gibt

0 Stimmen

Aktualisiert mit ein paar weiteren Versuchen. Erhalte immer noch Parse-Fehler.

10voto

Adam Punkte 131

Die Lösung besteht darin, einen Statuscode von 204 statt 200 vom Server zurückzugeben. 204 bedeutet "kein Inhalt", und es wird ein Erfolg zurückgegeben, während nicht versucht wird, den Parser aufzurufen

5voto

Simon Lieschke Punkte 12682

Erstens {[]} , {[null]} y {null} wird nicht funktionieren, da es sich um ungültige JSON-Objekte handelt (wie von der JSON-Validierer ).

Die übrigen Objekte sind alle gültige JSON-Objekte, so dass Ihre success Funktion aufgerufen werden sollte.

Wenn Sie ein Objekt übergeben, das kein Array oder ein Array-ähnliches Objekt ist, wird die each Funktion listet Ihre json Objekt durch seine benannten Eigenschaften. Im Fall Ihrer drei Objekte, die jeweils eine rows Eigenschaft this wird eingestellt auf [] , null y {} beziehungsweise, von denen keines eine columnName Attribut, so dass ein undefinierter Fehler ausgelöst wird.

Ihr {} Objekt hingegen hat keine Eigenschaften und sollte daher keinen Fehler verursachen, da die each Aufruf wird 0 Mal wiederholt. Was zeigt die folgende Zeile an, wenn Sie sie als erste Zeile in Ihre success Funktion?

alert(typeof json + ' ' + (json == null));

2voto

mkoryak Punkte 55621

Sie suchen dies:

[]

ein leeres Array. Das heißt, wenn Sie vorhaben, sofort darüber zu iterieren, dann brauchen Sie ein Array.

2voto

Remi Despres-Smyth Punkte 4003

Ihr Webdienst gibt möglicherweise null zurück. Ich habe herausgefunden, dass die Rückgabe von null aus einem Webdienstaufruf eine Antwort mit Statuscode 200, "Ok", zurückgibt, aber jQuery wirft danach einen Parsefehler.

Wenn dies der Fall ist, hat es nichts mit dem zu tun, was Sie an den Server senden, sondern nur mit dem, was der Server zurücksendet.

Wenn Sie in der Lage sind, den Webdienst zu ändern, können Sie versuchen, ein leeres JSON-Objekt oder einen Standardwert anstelle von Null zurückzugeben. Alternativ könnten Sie in Ihrem Error-Handler auf dieses Fehlerszenario prüfen, da Sie wissen, dass dies bedeutet, dass Ihr Aufruf Null zurückgibt.

1voto

Simon Lieschke Punkte 12682

Anstelle von:

$(json).each(function () { ... });

Ich glaube, Sie wollen es benutzen:

$.each(json, function () { ... });

Von der jQuery.each Dokumentation :

Diese Funktion ist nicht dasselbe wie $().each() - die zur Iteration verwendet wird, ausschließlich über ein jQuery-Objekt. Diese Funktion kann zur Iteration von über alles.

0 Stimmen

Typ'o. Aber danke - bearbeitet und gespeichert. Ist aber nicht wirklich eine Antwort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X