Псевдокод:
$(document).ajaxError(function(e, xhr, options, error) {
xhr.retry()
})
Еще лучше было бы какое-то экспоненциальное отставание
javascript
jquery
ajax
xmlhttprequest
Том Леман
источник
источник
tries
, а в случае неудачи вы вызовете свою функцию с помощьюtries+1
. Остановить выполнение наtries==3
любом другом номере.Ответы:
Что-то вроде этого:
источник
.success
, прикреплен к вызову функции, которая возвращает этот запрос ajax?tryCount
иretryLimit
излишне. Подумайте об использовании только 1 переменной:this.retryLimit--; if (this.retryLimit) { ... $.ajax(this) ... }
Один из подходов - использовать функцию-оболочку:
Другой подход - использовать
retries
свойство на$.ajax
Другой способ ( GIST ) - заменить оригинал
$.ajax
(лучше DRY)Точку рассмотреть делает уверен
$.ajax
метод не был уже обернут ранее, для того , чтобы избежать такой же код работает в два раза.Вы можете скопировать и вставить эти фрагменты (как есть) в консоль, чтобы протестировать их.
источник
У меня был большой успех с этим кодом ниже (пример: http://jsfiddle.net/uZSFK/ )
источник
Ни один из этих ответов не сработает, если кто-то позвонит
.done()
после своего вызова ajax, потому что у вас не будет метода успеха для присоединения к будущему обратному вызову. Итак, если кто-то сделает это:Тогда
mySuccessFunc
не будет вызова при повторной попытке. Вот мое решение, которое в значительной степени заимствовано из ответа @cjpak здесь . В моем случае я хочу повторить попытку, когда AWS API Gateway отвечает с ошибкой 502.Этот фрагмент отступит и попытается повторить попытку через 2 секунды, затем 5 секунд, затем 10 секунд, которые вы можете отредактировать, изменив константу RETRY_WAIT.
Служба поддержки AWS предложила добавить повторную попытку, так как это происходит у нас только один раз в синюю луну.
источник
Вот небольшой плагин для этого:
https://github.com/execjosh/jquery-ajax-retry
Автоматическое увеличение тайм-аута было бы хорошим дополнением к этому.
Чтобы использовать его глобально, просто создайте свою собственную функцию с подписью $ .ajax, используйте там retry api и замените все ваши вызовы $ .ajax вашей новой функцией.
Также вы можете напрямую заменить $ .ajax, но тогда вы не сможете выполнять вызовы xhr без повторной попытки.
источник
Вот метод, который у меня сработал для асинхронной загрузки библиотек:
Затем просто позвоните
.load_script
из своего приложения и вложите обратный вызов успеха:источник
Ответ DemoUsers не работает с Zepto, так как это в функции ошибки указывает на Window. (И такой способ использования this недостаточно безопасен, так как вы не знаете, как они реализуют ajax, или нет необходимости.)
Что касается Zepto, возможно, вы могли бы попробовать следующее, до сих пор у меня это хорошо работает:
Используйте конструктор, чтобы убедиться, что запрос повторяется!
источник
Ваш код почти заполнен :)
источник