У меня проблемы с созданным нами элементом управления jQuery. Предположим, у вас есть раскрывающийся список, который позволяет вам ввести идентификатор элемента, который вы ищете, и когда вы нажимаете ENTER или теряете фокус в текстовом поле, он проверяет через jQuery, что введенный вами идентификатор правильный, показывая предупреждение, если это не так. т.
Дело в том, что когда обычный пользователь вводит в него недопустимое значение и теряет фокус, нажимая кнопку отправки, сообщение jQuery возвращается после отправки формы.
Есть ли способ проверить, есть ли обработка запросов Async с помощью jQuery, чтобы я не разрешил отправку формы?
jquery
ajax
xmlhttprequest
Sabanito
источник
источник
$.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, чтобы заблокировать отправку и дать пользователю некоторое представление о том, почему его отправка не сработала. :)
источник
request.readyState > 0 && request.readyState < 4
чтобы определить `` активный '' запрос, потому что readyState 0 указывает, что, хотя объект был создан, веб-запрос не был инициирован .Мы должны использовать метод $ .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 () { } });
источник