我在使用jQuery控件时遇到了一些问题。假设您有一个下拉列表,允许您输入您要查找的项目的ID,当您按下ENTER或在文本框中失去焦点时,它会通过jQuery验证您输入的ID是否正确,如果它没有显示警告“T
当普通用户在其中输入无效值并通过按下提交按钮失去焦点时,jQuery帖子会在发送表单后返回。
有什么方法可以检查jQuery是否有任何异步请求处理,以便我不允许表单提交?
答案 0 :(得分:211)
$.active
返回活动Ajax请求的数量。
更多信息here
答案 1 :(得分:35)
答案 2 :(得分:24)
$(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);
});
答案 3 :(得分:10)
$ .ajax()函数返回XMLHttpRequest对象。将其存储在可从“提交”按钮的“OnClick”事件中访问的变量中。处理提交点击时,检查XMLHttpRequest变量是否为:
1)null,表示尚未发送任何请求
2)readyState值为4(已加载)。这意味着请求已成功发送并返回。
在其中任何一种情况下,返回true并允许提交继续。否则返回false以阻止提交,并向用户提供一些说明,说明他们的提交无效。 :)
答案 4 :(得分:1)
如果请求处于活动状态,我们必须使用 $。ajax.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 () {
}
});