返されたデータが有効なJSONでない場合、jQueryの _$.getJSON
_ が暗黙的に失敗するのは非常に不便なようです。なぜこれがサイレント障害で実装されたのですか?優れた障害動作でgetJSONを実行する最も簡単な方法は何ですか(例:例外、console.log()
、その他をスローします)?
使用できます
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
Same-Origin policy に違反して、別のドメインからJSONを取得しようとすると、このアプローチは空のメッセージを返します。 JSONP( limitations )またはSame-Origin Resource Sharingの推奨方法( [〜#〜] 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をリクエストしている場合、応答がない場合(ネットワークの停止など)、サイレントフェイルが発生します。詳細については、 this thread を参照してください。