Как остановить запрос jQuery ajax, отправленный через $.get?
Я делаю запрос ajax, используя $.get, как только пользователь вводит символ в поле ввода
я хочу прервать предыдущие вызовы ajax, а затем сделать новый, есть ли способ?
изменить
решена!
Я только что узнал, что $.get - это сокращенный путь к $.ajax, и, следовательно, он возвращает XHR и поэтому мы можем вызвать прерывание для этой переменной.
Ответы
Ответ 1
Вы можете использовать .abort()
в XMLHttpRequest, который возвращает $.get
.
var req = $.get('ajax/test.html', function(data) {
$('.result').html(data);
alert('Load was performed.');
});
//Abort request
req.abort()
От jQuery.ajax() документация:
Функция $.ajax() возвращает объект XMLHttpRequest, который он создает. Обычно jQuery обрабатывает создание этого объекта внутренне, но настраиваемую функцию для его изготовления можно указать с помощью параметра xhr. Возвращенный объект обычно можно отбросить, но он обеспечивает интерфейс нижнего уровня для наблюдения и обработки запроса. В частности, вызов объекта .abort() объекта останавливает запрос до его завершения.
Подробнее о .abort()
: https://developer.mozilla.org/en/XMLHttpRequest#abort
Существует также плагин jQuery AjaxQueue для обработки нескольких запросов Ajax, сделанных параллельно.
Ответ 2
Лучшим способом может быть установка тайм-аута в запросе ajax и перезапись его на каждое нажатие клавиши, поэтому фактический запрос не будет срабатывать, пока пользователь не перестанет печатать на секунду.
Таким образом, вы не делаете ненужных запросов и меньше загружаете как сервер, так и клиент.
отредактируйте для большей ясности:
var t = false;
function makeRequest(){
t = setTimeout(function(){
$.get() // make the request
},1000);
}
Вызов функции на каждом нажатии клавиши. Если пользователь нажимает другую клавишу в течение 1 секунды, тайм-аут будет перезаписан, и в конце он будет запущен только в том случае, если пользователь не нажимает клавишу в течение 1 секунды.