Автоматически попробуйте запрос AJAX снова при неудаче - PullRequest
9 голосов
/ 10 июня 2011

Я видел, что вы можете указать, что делать в общем случае, если ajax-запрос завершается неудачно, возможно ли, чтобы он повторил попытку в каком-то цикле, чтобы он пытался по крайней мере x раз, прежде чем он остановится? Я использовал этот код раньше:

$.ajaxSetup({
  "error":function() {   
    alert("error");
}});

Что будет применяться ко всем запросам AJAX (поправьте меня, если я ошибаюсь).

Я хочу сделать что-то вроде этого:

$.ajaxSetup({
  "error":function() {   
    $(this).ajax;
}});

Будет ли это работать? Или даже лучше: это будет правильный способ сделать это? Я бы обернул повторную попытку в систему подсчета, чтобы она не повторялась бесконечно. В моем приложении 9 раз из 10 оно будет работать правильно, но время от времени один из API, с которыми я взаимодействую, будет возвращать ошибку.

Любые предложения помогут, спасибо!

1 Ответ

13 голосов
/ 10 июня 2011

Вы можете попробовать что-то вроде этого:

    var attempts;
    function doAjaxRequest() {
        attempts = 0;
        doAjaxRequestLoop();
    }

    function doAjaxRequestLoop() {
        attempts += 1;
        if (attempts > 10) {
            alert('too many attempts.');
            return;
        }

        $.ajax({ // do your request
            error: function (error) {
                doAjaxRequestLoop();
            }
        });
    }

</script>

Хотя я мог бы рекомендовать против этого. Если запрос не удался, вы можете узнать, почему он не прошел. Что если пользователь потерял соединение с интернетом? Любые дальнейшие попытки могут снова потерпеть неудачу, так зачем повторять?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...