JQueryは失敗したAJAX呼び出しのフォールバックを提供できますか?これは私の試みです:
function update() {
var requestOK = false;
$.getJSON(url, function(){
alert('request successful');
requestOK = true;
});
if (!requestOK) {
alert('request failed');
}
}
残念ながら、たとえ$ .getJSON()メソッドのコールバック関数が呼び出されたとしても、コールバック関数がrequestOK変数を設定する機会を得る前に、メッセージ 'request failed'を取得します。コードが並行して実行されるためだと思います。そのような状況に対処する方法はありますか?チェーンまたは、コールバック関数を含むAJAXリクエストを待機する何らかの方法について考えました。しかし、どのように?誰もそれを行う方法を知っていますか?
下位レベルの $。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');
}
});
}
[〜#〜] edit [〜#〜]timeout
を$.ajax
呼び出しに追加して、 5秒。
Dougsの答えは正しいですが、実際には$.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インターフェイスの一部です。
基本的に、イベントを非同期アクションafterにアタッチすることができます。つまり、アクションを呼び出す必要はありません。アクションに対するイベント関数。
JQuery.Deferredの詳細については、こちらをご覧ください。 http://api.jquery.com/category/deferred-object/
はい、jQueryに組み込まれています。 jquery documentation のドキュメントを参照してください。
ajaxErrorはあなたが望むものかもしれません。
Promiseを返して.then(successFunction、failFunction);を使用できるため、このアプローチの方が好きです。必要な場所に。
var promise = $.ajax({
type: 'GET',
dataType: 'json',
url: url,
timeout: 5000
}).then(function( data, textStatus, jqXHR ) {
alert('request successful');
}, function( jqXHR, textStatus, errorThrown ) {
alert('request failed');
});
//also access the success and fail using variable
promise.then(successFunction, failFunction);
あなたが探しているのはjquery ajax object のエラーオプションだと思います
getJSONは$.ajax
オブジェクトのラッパーですが、エラーオプションへのアクセスは提供しません。
編集:dcneinerは、使用する必要があるコードの良い例を示しています。 (返信を投稿する前に)