Как узнать, есть ли у jQuery ожидающий запрос Ajax?
У меня возникли некоторые проблемы с управлением jQuery, которое мы сделали. Предположим, у вас есть выпадающий список, который позволяет ввести идентификатор элемента, который вы ищете, и когда вы нажимаете ENTER или теряете фокус в текстовом поле, он проверяет с помощью jQuery, что введенный идентификатор правильный, показывая предупреждение, если это не так.
дело в том, что когда обычный пользователь вводит в него недопустимое значение и теряет фокус, нажав кнопку отправки, сообщение jQuery возвращается после отправки формы был послан.
есть ли способ проверить, есть ли асинхронная обработка запросов jQuery, чтобы я не разрешал отправлять форму?
5 ответов:
$.active
возвращает количество активных запросов Ajax.Подробнее здесь
$(function () { function checkPendingRequest() { if ($.active > 0) { window.setTimeout(checkPendingRequest, 1000); //Mostrar peticiones pendientes ejemplo: $("#control").val("Peticiones pendientes" + $.active); } else { alert("No hay peticiones pendientes"); } }; window.setTimeout(checkPendingRequest, 1000); });
долларов.функция ajax () возвращает объект XMLHttpRequest. Сохраните это в переменной, доступной из события "OnClick" кнопки отправки. При обработке щелчка отправки проверьте, является ли переменная XMLHttpRequest:
1) null, что означает, что запрос еще не был отправлен
2) что значение readyState равно 4 (загружено). Это означает, что запрос был отправлен и успешно вернулся.
в любом из этих случаев верните true и разрешите подчинитесь, чтобы продолжить. В противном случае верните false, чтобы заблокировать отправку и дать пользователю некоторое представление о том, почему их отправка не работает. :)
мы должны использовать $.Аякс.метод abort() метод прерывания запроса, если запрос активен. Этот объект promise использует readyState свойства, чтобы проверить, является ли запрос или нет.
HTML
<h3>Cancel Ajax Request on Demand</h3> <div id="test"></div> <input type="button" id="btnCancel" value="Click to Cancel the Ajax Request" />
JS-код
//Initial Message var ajaxRequestVariable; $("#test").html("Please wait while request is being processed.."); //Event handler for Cancel Button $("#btnCancel").on("click", function(){ if (ajaxRequestVariable !== undefined) if (ajaxRequestVariable.readyState > 0 && ajaxRequestVariable.readyState < 4) { ajaxRequestVariable.abort(); $("#test").html("Ajax Request Cancelled."); } }); //Ajax Process Starts ajaxRequestVariable = $.ajax({ method: "POST", url: '/echo/json/', contentType: "application/json", cache: false, dataType: "json", data: { json: JSON.encode({ data: [ {"prop1":"prop1Value"}, {"prop1":"prop2Value"} ] }), delay: 11 }, success: function (response) { $("#test").show(); $("#test").html("Request is completed"); }, error: function (error) { }, complete: function () { } });