Ungültiger JSON in Chrome, kein Problem in Firefox (so seltsam!)

8

Alle Schlüssel wurden doppelt zitiert. Das ganze Element war ein Objekt. Firefox läuft gut, aber Chrome meldet "ungültiges JSON". Warum?

Dies ist vollständiger Code.

%Vor%

Bearbeiten : JSON-Ausgabe von Chrome (FirebugLite):

%Vor%

JSON-Ausgabe von Firefox (Firebug):

%Vor%

Ich habe es mit Ссылка überprüft und es heißt "Valid JSON"

Bearbeiten :

Von Chrome aus gesehene Quelle:

%Vor%     
Emerald214 20.05.2011, 02:34
quelle

3 Antworten

11

Sie haben am Anfang Ihrer PHP-Datei einen Unicode Byte Order Mark . Aus diesem Grund und weil es vor der Eröffnung <?php ist, wird es zu Beginn des JSON an den Client gesendet. Dadurch wird Ihr JSON ungültig, da diese Zeichen nicht am Anfang der JSON-Daten erscheinen sollten. Einige Browser können damit umgehen; Andere Browser wie Chrome sind witziger und beschweren sich.

Das Entfernen der Byte Order Mark durch Speichern der Datei ohne die in Ihrem Editor eingestellte Option (wie dies vom Editor abhängig ist) löst Ihr Problem.

(Sie würden wahrscheinlich auch feststellen, dass header() und andere PHP-Funktionen, die Header senden, auch in Ihrer PHP-Datei nicht funktionieren, was Ihnen den Fehler gibt, dass die Ausgabe bereits begonnen hat, weil die BOM gesendet worden wäre bevor dein PHP zu interpretieren begann.)

    
Matt Gibson 20.05.2011, 09:16
quelle
2

Meine Vermutung (basierend auf dem Unterschied zwischen den von Ihnen bereitgestellten Chrome- und Firefox-Ausgaben) wäre, dass Sie einige führende (oder nachfolgende) Leerzeichen und / oder Zeilenumbrüche in Ihre PHP-Ausgabe eingefügt haben.

Sie haben nur das PHP für die relevanten Funktionen bereitgestellt, aber prüfen Sie, ob Sie vor oder nach den Tags <?php und ?> sowohl im Hauptprogramm als auch in anderen geladenen PHP-Dateien Leerzeichen haben mit include() oder require() .

Es ist ein ziemlich häufiges Problem mit PHP-Code. In einer normalen HTML-Seite ist es nicht wirklich wichtig (Sie haben eine Menge von falschem Leerraum, aber es hat keinen Einfluss auf das Rendering), aber wenn Sie andere Arten von Daten ausgeben, kann es den Unterschied ausmachen, ob es gültig ist oder nicht. Dies gilt insbesondere, wenn Sie binäre Daten ausgeben. Ich habe dieses Problem noch nicht mit JSON gesehen, aber die Leerzeichen am Anfang der von Ihnen angegebenen Zeichenfolge sind ein klassisches Zeichen für solche Dinge.

    
Spudley 20.05.2011 08:22
quelle
0

versuche, den JSON (in PHP-Code) in Klammern zu kapseln ... und entferne sie in der Erfolgsfunktion von ajax call vor parseJOSN .

    
helle 20.05.2011 08:14
quelle

Tags und Links