44

$.getJSON返されたデータが有効なJSONでない場合に、jQueryがサイレントに失敗するのは非常に不便なようです。なぜこれがサイレント障害で実装されたのですか?より良い失敗動作(たとえば、例外のスローなど)でgetJSONを実行する最も簡単な方法はconsole.log()何ですか?

4

5 に答える 5

88

あなたが使用することができます

        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 )の推奨される方法を使用して、同一生成元ポリシーを回避できることに注意してください。

于 2012-04-27T14:01:45.307 に答える
29

ドキュメントから直接:

重要: 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
});
于 2011-03-30T21:48:37.163 に答える
3

$.ajax代わりに使用して、dataTypeオプションを「json」に設定できます。ドキュメントから:

"json":応答をJSONとして評価し、JavaScriptオブジェクトを返します。jQuery 1.4では、JSONデータは厳密な方法で解析されます。不正な形式のJSONはすべて拒否され、解析エラーがスローされます。(適切なJSONフォーマットの詳細については、json.orgを参照してください。)

于 2011-03-30T21:48:22.197 に答える
0

このAPIのドキュメントを確認する必要があります....errorがあります。

http://api.jquery.com/jQuery.getJSON/

于 2011-03-30T21:48:17.683 に答える
0

応答としてJSONPを要求している場合、応答がない場合(ネットワークの停止など)、サイレント失敗が発生します。詳細については、このスレッドを参照してください。

于 2016-01-13T17:41:08.447 に答える