Ответ 1
Вы можете использовать ajaxStart и ajaxStop, чтобы отслеживать, когда запросы активны.
У меня возникли проблемы с элементом управления jQuery, который мы сделали. Предположим, у вас есть раскрывающийся список, который позволяет вам вводить идентификатор элемента, который вы ищете, и когда вы нажимаете ENTER или теряете фокус в текстовом поле, он проверяет через jQuery, что введенный вами идентификатор верен, показывая предупреждение, если оно "т.
Дело в том, что когда обычный пользователь вводит в него недопустимое значение и теряет фокус, нажимая кнопку отправки, пост jQuery возвращается после отправки отправки формы.
Можно ли каким-либо образом проверить, есть ли какая-либо обработка запроса async с помощью jQuery, чтобы я не разрешал отправку формы?
Вы можете использовать ajaxStart и ajaxStop, чтобы отслеживать, когда запросы активны.
$.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 (Loaded). Это означает, что запрос был отправлен и успешно возвращен.
В любом из этих случаев верните true и разрешите отправке продолжить. В противном случае верните false, чтобы заблокировать отправку и дать пользователю некоторое указание на то, почему их передача не работала.:)
Эта скрипта использует метод $.ajax.abort() для отмены запроса, если он активен. Он использует свойство 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 () {
}
});