2017-06-19 6 views
0

複数のjquery ajax呼び出しを処理する際に問題が発生しましたが、タイムアウトエラーがありますが、これはどのリクエストエラーであるかをどのように知ることができますか?Deferredを使用して複数のajaxリクエストエラーを処理するにはどうすればよいですか?

$.when(ajaxDeferred1, ajaxDeferred2) 
    .done(function(result1, result2) {}) 
    .fail(function(response, statusText) { 
    // how do I know which(ajaxDeferred1 or ajaxDeferred2) ajax call error this is? 
}); 

ajaxDeferred1

$.ajax({ 
    method: 'GET', 
    url: xxx, 
    timeout: 5000, 
}); 

私は要求ごとに ')(.fail' を置くことによって、エラーを処理することができます知っているが、ハンドルエラー方法上記の方法はありますか?

さらにこのように処理できますか?

$.when(ajaxDeferred1, ajaxDeferred2) 
    .done(function(result1, result2) {}) 
    .fail(function(errorForRequest1, errorForRequest2) { 
    // handle error 
}); 

EDIT:

私は私の質問は、より明確にする必要があると思います。上記の例では:

$.when(ajaxDeferred1, ajaxDeferred2) 
    .done(function(result1, result2) {}) 
    .fail(function(errorForRequest1, errorForRequest2) { 
    // if all request has done, but one or more request has got error, return the error here then! 
    // So I can handle which part UI should show and which UI part I should hide due to the error! 
}); 

私はすべてがエラーなしで実行されたときに結果を「行って」、そして全てがをに行われているが、1つのまたはそれ以上の要求は問題が発生し、それらをすべて返却したときに「エラー」をゲットしたいです一緒に '.fail()'になります。

答えて

1

私は@Miguelモタの答えが好きです。しかし、代わりに、失敗した場合に遅延オブジェクトを戻すことになります。したがって、いくつかのデータを追加することができます:

var dfd1 = jQuery.ajax({ 
    method: 'GET', 
    url: 'some request that fails first', 
    timeout: 1 
}); 

dfd1.id = 1; 

var dfd2 = jQuery.ajax({ 
    method: 'GET', 
    url: 'some request that fails second', 
    timeout: 1000 
}); 

dfd2.id = 2; 

jQuery.when(dfd1, dfd2) 
    .done(function() { }) 
    .fail(function (request) { 
     // id: 1 
     console.log('id: ' + request.id); 
    }); 
+0

こんにちは、これは私の意図にもっと近づいています。唯一の問題は 'fail()'が他のajaxリクエストを続行するのを妨げることです、私は自分の質問を編集しました。 – Kim

1

.always()を使用して、それぞれの約束を繰り返し実行し、解決されたかどうかを確認できます。

var promises = [ajaxDeferred1, ajaxDeferred2] 

$.when.apply($, promises) 
    .always(function() { 
    $.each(promises, function(i) { 
     this.done(function(result) { 
     console.log('promise', i, 'resolved'); 
     }).fail(function(error) { 
     console.log('promise', i, 'failed'); 
     }); 
    }); 
    }); 

JSFiddleデモ:https://jsfiddle.net/pr45eov1/3/

関連する問題