web-dev-qa-db-ja.com

Internet Explorer 8で未定義のJSONオブジェクト

現在、私はJavaScriptファイルを書いており、次の行があります:

var res = "JSON=" + JSON.stringify(result);

結果はこの行のすぐ上に設定されています。私が抱えている問題は、IE8(つまりIE8のみ)がJSONが何らかの形で未定義であることを私に報告していることです。私が理解したように、IE8はJSONサポートを実装したブラウザであるため、これをどうすればよいかわかりません。誰が何が起こっているのか考えていますか?

70
keybored

実際にIE 8モードになっていることを確認してください。優先モードは標準のdoctypeです...

<!DOCTYPE html>

...または望ましくないメソッド、X-UA-Compatibleメタタグ/ヘッダー...

<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

詳細については、「 ドキュメントの互換性の定義 」を参照してください。

117
Andy E

jQuery.parseJSON を使用すると、すでにJQueryを使用している場合にこれを解決できました。

9
Chen

Doctypeの欠如や間違ったdoctype、またはhtml構文のエラーにより、IEが予期したものとは異なるドキュメントモードを使用するように強制されます。

私はテストドキュメントで単純な「」を使用していましたが、HEADタグがwindow.JSONを未定義にしました。

ブラウザのバージョンに対してリソースをテストすることをお勧めします。また、ユーザーがドキュメントモードのエミュレーションでIEを使用できる場合、ネイティブが未定義の場合にJSON.parseおよびJSON.stringifyを提供するコードを用意することをお勧めします。

6
Thadeu de Paula
function parseJson(jsonString) {
    if ($.browser.msie && $.browser.version < 8) {
        return eval('(' + jsonString + ')');
    }
    else {
        return JSON.parse(jsonString);
    }
}
3
mq3w

ページエンコーディングが<!DOCTYPE html>BOM(バイトオーダーマーク)である場合、UTF-8にもかかわらず発生する可能性があります。適切なテキストエディタを使用して、BOMなしでUTF-8としてファイルを保存してみてください。

2
user126083

次のコードをjsファイルに入れます。

var JSON = JSON || {};

// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {

var t = typeof (obj);
if (t != "object" || obj === null) {

    // simple data type
    if (t == "string") obj = '"'+obj+'"';
    return String(obj);

}
else {

    // recurse array or object
    var n, v, json = [], arr = (obj && obj.constructor == Array);

    for (n in obj) {
        v = obj[n]; t = typeof(v);

        if (t == "string") v = '"'+v+'"';
        else if (t == "object" && v !== null) v = JSON.stringify(v);

        json.Push((arr ? "" : '"' + n + '":') + String(v));
    }

    return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
};

// implement JSON.parse de-serialization
JSON.parse = JSON.parse || function (str) {
if (str === "") str = '""';
eval("var p=" + str + ";");
return p;
 };
1
atom217