JSON auf IE6 (IE7)

77

Entschuldigen Sie meine Ungeduld, aber nachdem ich wochenlang lange aufgestanden bin und mein Web online gestellt habe, habe ich keine Energie mehr zum Debuggen ... Ich kann Google einfach nicht, wie JSON auf IE6 und IE7 implementiert wird ... Ich benutze

JSON.stringify(...)

Soweit ich weiß, ist JSON nicht in IE6-7 integriert und muss dynamisch in Inline-Code eingefügt werden. Wie machen Sie das?

Ich habe bereits jQuery - ist es mein richtiges Verständnis, dass ihre JSON-Engine auf der nativen Browser-Engine basiert?

Dann ein Kommentar zu ungültigem JSON-Code, der IE6-7 zum Scheitern bringt, aber ich dachte, er wäre in IE6-7 nicht nativ?

Jemand?

David Thorisson
quelle

Antworten:

105

Da Sie die JSON.stringifyMethode verwenden möchten , müssen Sie den JSON3-Parser einschließen , um ihn im IE <8 zu unterstützen.

Diese Bibliothek entspricht den Standardmethoden der ECMAScript 5th Edition-Spezifikation und prüft, ob eine native Implementierung verfügbar ist. In modernen Browsern wird diese native Implementierung verwendet.

Christian C. Salvadó
quelle
thx - Ich brauche den Code, um ihn nur dynamisch in IE6 / 7 aufzunehmen (das heißt, Browser-Erkennung ist auch erforderlich)
David Thorisson
1
oder verstehe ich das falsch - vielleicht brauche ich es nicht dynamisch, da JSON den nativen Browser verwendet, sofern verfügbar. Es handelt sich also nur um einen <script src = " json.org/json2.js " type = "text / javascript"> </ script> in der Kopfzeile?
David Thorisson
2
@ David, Sie können es einfach in Ihre Seiten aufnehmen, und wenn der Browser das globale JSON-Objekt unterstützt, wird er nichts tun, oder wenn Sie möchten, können Sie es nur dynamisch if (typeof JSON == 'undefined')
einfügen
2
Ich möchte jQuery.parseJSON ( api.jquery.com/jQuery.parseJSON ) anstelle von json2 hinzufügen, da Jquery auf weit mehr Websites verwendet wird.
Stefan
2
@Stefan jQuery macht zwar keine Stringifizierung, es analysiert nur, das ist anders
Benjamin Gruenbaum
2

Es muss etwas missverstanden werden. Die Objektnotation ist seit einiger Zeit in JavaScript (soweit ich weiß, handelt es sich um ein Kernkonzept von JavaScript). Ich meine, die Fähigkeit, Code wie zu schreiben var o= {a:"b"};
. Wenn Sie dies tun können, können Sie auch aufrufen, eval('var o= {a:"b"};')und auf diese Weise "implementieren" Sie JSON in jedem Browser.

UPDATE: Lesen Sie Ihren Beitrag erneut und stellen Sie schließlich fest, dass das Problem darin besteht, Objekte zu serialisieren und nicht zu deserialisieren. Dann können Sie die JavaScript-Bibliothek dafür verwenden: https://github.com/douglascrockford/JSON-js/blob/master/json2.js

Naivisten
quelle
@ David, ich denke, das ist die einzige Option, die Sie haben, wenn Sie JSON-Daten von einer externen Datenquelle erhalten. Ist es nicht?
Naivisten
Eval ist die schlechteste Option, wenn Sie Daten aus einer externen Datenquelle laden möchten. Sie ist für Skriptinjektionsangriffe geöffnet. Wenn Sie JSONObjektkompatibilität benötigen, ist json2.js der richtige Weg.
Mikerobi
mikerobi, danke für den kommentar (aber nicht für die abstimmung). Seien Sie gewarnt, dass json2.js eval auch intern aufruft (siehe github.com/douglascrockford/JSON-js/blob/master/json2.js#L471 ). Auch wenn Crockford angibt, dass es gegen die Ausführung geschützt ist, glaube ich dennoch, dass dies möglich ist ein Weg, um es zu umgehen.
Naivisten
1

"Dynamisch hinzugefügter Inline-Code" verwendet die Funktionalität der Douglas Crockfords json2-Bibliothek oder die eigene Implementierung von jQuery, wenn die Browserversion dies nicht nativ unterstützt.

jQuery ist nicht auf JSON-Dekodierungsfunktionen angewiesen, die vom Browser bereitgestellt werden. Wenn der Browser die JSON-Dekodierung unterstützt, wird sie von jQuery verwendet.

Matt
quelle
OK, jQuery zu verwenden wäre großartig, da es bereits enthalten ist. Warum funktioniert JSON.stringify (...) dann nicht in IE6-7? Gibt es eine spezielle Syntax für jQuery JSON?
David Thorisson
JSON.stringify funktioniert unter IE6-7, vorausgesetzt, Sie haben das Skript hinzugefügt: \
Matt
In IE7 erhalte ich: SCRIPT5009: 'JSON' ist undefiniert jquery-1.8.0.min.js, Zeile 2 Zeichen 16953, wenn dieser Ansatz verwendet wird und die JSON-Bibliothek nicht enthalten ist.
Anders Branderud
@AndersBranderud: Sollte nicht der Fall sein. jQuery bietet explizit einen Fallback. Wenn Sie dieses Verhalten in der neuesten Version von jQuery (1.9.0b) reproduzieren können, würde ich in Betracht ziehen , einen Fehler einzureichen .
Matt
@ Matt, danke! Ich habe einen Fehlerbericht eingereicht: Mit Jquery 1.9.0 und auch jquery-1.8.0.min.js: Ein Aufruf der Methode 'jQuery.parseJSON' verursacht: "SCRIPT5009: 'JSON' ist undefiniert jquery-1.8.0.min .js, Zeile 2 Zeichen 16953 "in IE 7 (ich verwende IE9 mit IE7 als 'Dokumentversion').
Anders Branderud