我如何知道jQuery是否有待处理的Ajax请求?

时间:2009-11-30 22:37:11

标签: jquery ajax xmlhttprequest

我在使用jQuery控件时遇到了一些问题。假设您有一个下拉列表,允许您输入您要查找的项目的ID,当您按下ENTER或在文本框中失去焦点时,它会通过jQuery验证您输入的ID是否正确,如果它没有显示警告“T

当普通用户在其中输入无效值并通过按下提交按钮失去焦点时,jQuery帖子会在发送表单后返回。

有什么方法可以检查jQuery是否有任何异步请求处理,以便我不允许表单提交?

5 个答案:

答案 0 :(得分:211)

$.active返回活动Ajax请求的数量。

更多信息here

答案 1 :(得分:35)

您可以使用ajaxStartajaxStop来跟踪请求何时处于有效状态。

答案 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 () {

            }
        });