$.getJSON
返されたデータが有効なJSONでない場合に、jQueryがサイレントに失敗するのは非常に不便なようです。なぜこれがサイレント障害で実装されたのですか?より良い失敗動作(たとえば、例外のスローなど)でgetJSONを実行する最も簡単な方法はconsole.log()
何ですか?
5 に答える
あなたが使用することができます
function name() {
$.getJSON("", function(d) {
alert("success");
}).done(function(d) {
alert("done");
}).fail(function(d) {
alert("error");
}).always(function(d) {
alert("complete");
});
}
エラーの原因を確認したい場合は、フルバージョンを使用してください
function name() {
$.getJSON("", function(d) {
alert("success");
}).fail( function(d, textStatus, error) {
console.error("getJSON failed, status: " + textStatus + ", error: "+error)
});
}
JSONが整形式でない場合は、次のように表示されます。
getJSON failed, status: parsererror, error: SyntaxError: JSON Parse error: Unrecognized token '/'
URLが間違っていると、次のように表示されます。
getJSON failed, status: error, error: Not Found
同一生成元ポリシーに違反して別のドメインからJSONを取得しようとすると、このアプローチは空のメッセージを返します。JSONP(制限があります)またはクロスオリジンリソースシェアリング(CORS )の推奨される方法を使用して、同一生成元ポリシーを回避できることに注意してください。
ドキュメントから直接:
重要: jQuery 1.4以降、JSONファイルに構文エラーが含まれている場合、リクエストは通常サイレントに失敗します。
ドキュメントページにあるように、getJSONは単に
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
失敗動作を取得するには、次のように$.ajaxを使用できます。
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
error: another callback
});
$.ajax
代わりに使用して、dataType
オプションを「json」に設定できます。ドキュメントから:
"json":応答をJSONとして評価し、JavaScriptオブジェクトを返します。jQuery 1.4では、JSONデータは厳密な方法で解析されます。不正な形式のJSONはすべて拒否され、解析エラーがスローされます。(適切なJSONフォーマットの詳細については、json.orgを参照してください。)
このAPIのドキュメントを確認する必要があります....errorがあります。
応答としてJSONPを要求している場合、応答がない場合(ネットワークの停止など)、サイレント失敗が発生します。詳細については、このスレッドを参照してください。