Мне нужно создать функцию, которая повторяет неудачный запрос ajax до указанного предела, , но Мне нужно, чтобы обещание было отклонено только в случае превышения максимального количества попыток, например:Ошибка повторения запросов jQuery.ajax
function my_ajax(...) { ... }
// then I use it this way
return $.when(my_ajax('foo.json'), my_ajax('bar.json'))
для того, чтобы работать с jQuery.when, только один посыл должен быть возвращен в my_ajax
, которые должны быть решены, когда внутренний jQuery.ajax разрешен, и отвергнут только тогда, когда был сделан максимум повторов.
код я сделал это:
function do_ajax(args, dfd, attempt) {
dfd || (dfd = $.Deferred());
attempt || (attempt = 1);
$.ajax(args).then(dfd.resolve, function(xhr, text_status, error_thrown) {
console.error(/* something useful */);
attempt++;
if(attempt > 3) {
dfd.reject(xhr, text_status, error_thrown);
} else {
do_ajax(args, dfd, attempt);
}
});
return dfd.promise();
}
// in some random code
return $.when(do_ajax({url:'foo.json'}), do_ajax({url:'bar.json'});
Это работает для меня *, но это своего рода трудно понять. Вопрос в том, есть ли лучший способ (и более легкий для чтения)?
* - На самом деле я не проверял, чтобы иногда терпеть неудачу, но я отлично работаю, когда первый запрос ajax успешно завершен.
возможный дубликат [Какой лучший способ повторить запрос AJAX при сбое с помощью jQuery?] (http : //stackoverflow.com/questions/10024469/whats-the-best-way-to-retry-an-ajax-request-on-failure-using-jquery) – user2284570