奇妙なJavaScript JSON未定義エラー
-
05-07-2019 - |
質問
エラーが発生したため、どこにも言及されていません。 ASP.NETでAJAX対応のWCF Webサービスを開発しています。 ASP.NETマスターページの<!> lt; asp:ScriptManager <!> gt;に、json.orgから新しくコピーしたjson.jsファイルを含めました。ページを実行すると、json.jsのコードの最初の行(多くのコメントの後に続く)でページが失敗します(VS 2008はJavascript例外をキャッチします)。
JSON = JSON || {};
エラーはJSONが未定義であることを示しています:
Microsoft JScriptランタイムエラー:「JSON」は未定義です
まあ、当たり前!そのため、行が定義されているかどうかをテストしており、定義されている場合は空のオブジェクトに設定しています。定義されていないはずですよね?最後に、未定義の変数に対してこのような操作を実行するのはJavascriptのエラーではないと聞いた。
誰が私にここで何が起こっているのかについての手がかりを与えることができますか?他のどこかで問題が発生し、この問題の原因となっていると思われます。私は、JavascriptまたはASP.NETのどちらにも深い経験がないので、セットアップでよくある落とし穴が抜けている可能性があります。
解決
json2.js を使用する必要があります。 問題のある行が変更されました:
// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.
if (!this.JSON) {
this.JSON = {};
}
他のヒント
ページがIE8標準モードでレンダリングされていることを確認します。ドキュメントがQuirksモードまたはIE7モードでレンダリングされている場合、this.JSON
は未定義です。
ページに次のメタタグを含めることで、IE8をIE8標準モードで強制的にレンダリングできます。
<meta http-equiv="x-ua-compatible" content="IE=8" />
前述のとおり、json2を使用する必要があります。
ただし、エラーは、MSによるグローバル変数の処理に起因します。 window.JSON = window.JSONを試してください|| {};それ以降、JSONは問題なく動作するはずです。
やらなければならない場合があるvar JSON = JSON || {};
IE8のJavascriptで同様の問題に遭遇しました。
Googleマップ<!> quot; streetview <!> quot;を使用しようとすると、同じ問題が発生しました。ストリートビューウィンドウが完全に黒くなり、エラーを示すアイコンがステータスバーに表示されます。 webdev007と同様にDivXを無効にし、問題は解決しました! Webdev、あなたは天才です!ありがとう!
最近、JSON undefined JavaScriptエラーの受信を開始しましたが、問題はIEの最近のDivXアドオンによるものであることがわかりました。また、DivXアドオンは、https参照があり、http参照がないWebページで、安全なコンテンツの警告を引き起こしました(Web開発中に参照を修正するために、混合コンテンツの表示をプロンプトに設定します)。 DivXアドオンを無効にした後、JSONの未定義のJavaScriptエラーと、誤ったセキュアコンテンツ警告ポップアップが消えました。
同じエラーがあり、すでにjson2を使用していました。
私にとっては、式の前にvar
を追加すると動作します:
var JSON = JSON || {};