現在、私はJavaScriptファイルを書いており、次の行があります:
var res = "JSON=" + JSON.stringify(result);
結果はこの行のすぐ上に設定されています。私が抱えている問題は、IE8(つまりIE8のみ)がJSONが何らかの形で未定義であることを私に報告していることです。私が理解したように、IE8はJSONサポートを実装したブラウザであるため、これをどうすればよいかわかりません。誰が何が起こっているのか考えていますか?
実際にIE 8モードになっていることを確認してください。優先モードは標準のdoctypeです...
<!DOCTYPE html>
...または望ましくないメソッド、X-UA-Compatible
メタタグ/ヘッダー...
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
詳細については、「 ドキュメントの互換性の定義 」を参照してください。
jQuery.parseJSON を使用すると、すでにJQueryを使用している場合にこれを解決できました。
Doctypeの欠如や間違ったdoctype、またはhtml構文のエラーにより、IEが予期したものとは異なるドキュメントモードを使用するように強制されます。
私はテストドキュメントで単純な「」を使用していましたが、HEADタグがwindow.JSONを未定義にしました。
ブラウザのバージョンに対してリソースをテストすることをお勧めします。また、ユーザーがドキュメントモードのエミュレーションでIEを使用できる場合、ネイティブが未定義の場合にJSON.parseおよびJSON.stringifyを提供するコードを用意することをお勧めします。
function parseJson(jsonString) {
if ($.browser.msie && $.browser.version < 8) {
return eval('(' + jsonString + ')');
}
else {
return JSON.parse(jsonString);
}
}
ページエンコーディングが<!DOCTYPE html>
でBOM
(バイトオーダーマーク)である場合、UTF-8
にもかかわらず発生する可能性があります。適切なテキストエディタを使用して、BOM
なしでUTF-8
としてファイルを保存してみてください。
次のコードを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;
};