43

jQuery は失敗した AJAX 呼び出しのフォールバックを提供できますか? これは私の試みです:

function update() {
    var requestOK = false;

    $.getJSON(url, function(){
        alert('request successful');
        requestOK = true;
    });

    if (!requestOK) {
        alert('request failed');
    }
}

残念ながら、$.getJSON() メソッドのコールバック関数が呼び出されても、コールバック関数が requestOK 変数を設定する前に、「リクエストが失敗しました」というメッセージが表示されます。コードが並行して実行されるためだと思います。このような状況を処理する方法はありますか? コールバック関数を含む AJAX リクエストをチェーンまたは待機する方法について考えました。しかし、どのように?誰もそれを行う方法を知っていますか?

4

5 に答える 5

89

低レベルの$.ajax呼び出しまたはajaxError関数を使用する必要があります。ここでは $.ajax メソッドを使用しています。

function update() {
  $.ajax({
    type: 'GET',
    dataType: 'json',
    url: url,
    timeout: 5000,
    success: function(data, textStatus ){
       alert('request successful');
    },
    fail: function(xhr, textStatus, errorThrown){
       alert('request failed');
    }
  });
}

EDITtimeoutコールに aを追加し、$.ajax5 秒に設定しました。

于 2009-12-04T01:54:07.490 に答える
13

ダグスの答えは正しいですが、実際には$.getJSONエラーを使用してキャッチできます(を使用する必要はありません$.ajax)。関数getJSONの呼び出しと呼び出しを連鎖させるだけです。fail

$.getJSON('/foo/bar.json')
    .done(function() { alert('request successful'); })
    .fail(function() { alert('request failed'); });

ライブデモ: http: //jsfiddle.net/NLDYf/5/

この動作は、jQuery.Deferredインターフェースの一部です。基本的に、非同期アクションを呼び出した後
、そのアクションに イベントをアタッチできます。つまり、イベント関数をアクションに渡す必要はありません。

jQuery.Deferredの詳細については、http://api.jquery.com/category/deferred-object/をご覧ください。

于 2012-12-05T13:53:18.287 に答える
2

はい、jQuery に組み込まれています。jquery documentationのドキュメントを参照してください。

ajaxError はあなたが望むものかもしれません。

于 2009-12-04T01:49:55.907 に答える
1

あなたが探しているのは、jquery ajax オブジェクトのエラー オプションだと思います

getJSON は$.ajaxオブジェクトのラッパーですが、エラー オプションへのアクセスは提供しません。

編集: dcneiner は、使用する必要があるコードの良い例を示しています。(返信を投稿する前に)

于 2009-12-04T01:56:32.463 に答える