Отмена текущего запроса AJAX с помощью события нажатия кнопки! - PullRequest
1 голос
/ 04 июля 2011

Я бы хотел отменить, если мой ajax-запрос занимает много времени при медленном соединении.

Я показываю оверлей, когда .ajaxStart(), и если это занимает больше пяти секунд (я справился с setInterval), на оверлее появляется кнопка, которая должна отменить текущий запрос ajax.

Вот часть моего кода:

jqXHR = $.ajax({
    url: 'includes/inc_ajax.php',
    type: 'POST',
    data: '&ajax=1&action=7',
    success: function (txt) {
        var cntr = $.parseJSON(txt);
        $("#onlineppl").html(cntr.online);
        $("#todayppl").html(cntr.bugun);
        $("#totalppl").html(cntr.toplam);
    }
});

$("#abortAjax").button({ icons: {secondary: "ui-icon-cancel"} }).click(function() {
    $(jqXHR).abort();
});

Нужно ли назначать функцию $.ajax() переменной, чтобы прервать ее? У меня также есть много запросов ajax, вызываемых ajax, поэтому я думаю, что браузер не может отследить то же имя переменной, которое приводит к тому, что метод abort не работает.

Это мой первый вопрос, и я немного растерялся. Любая помощь приветствуется. Спасибо.

Ответы [ 3 ]

1 голос
/ 04 июля 2011

Ну, вы попробуйте:

jqXHR.abort();

Без $ ()

Примечание не проверено, я его где-то видел

РЕДАКТИРОВАТЬ

Ааа нашел его:

Остановить все активные запросы ajax в jQuery

0 голосов
/ 29 ноября 2011

Примечание. Вы не можете остановить обработку запроса AJAX на сервере после его получения.Сервер продолжит обработку запроса, даже если браузер больше не ожидает ответа.Не существует надежного способа заставить веб-сервер останавливаться при обработке обрабатываемого запроса, за исключением реализации чего-либо вручную (например, проверка свойства сеанса, которая устанавливается другой страницей).

Итакв основном сервер все еще будет работать, но браузер клиента будет игнорировать ответ - имейте в виду, что это также учитывает ограничения ваших подключений к домену (который по умолчанию обычно составляет только ДВА).

0 голосов
/ 04 июля 2011

Да, JavaScript - это язык на основе прототипов, и каждый экземпляр объекта имеет указатель. Когда начинаются два вызова ajax, ваш jqXHR возвращает только указатель на второй вызов ajax. Это также указано в этой статье , в которой вы должны получить токен из функции, чтобы вы могли обратиться к нему, чтобы отменить его позже.

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