我有一个带有行的表格样式页面.每行都有一个复选框.我可以 Select 所有/多个复选框,然后单击"提交",is会为每一行调用Jquery ajax.

基本上,每一行都有一个表单,我迭代所有选中的行,然后提交执行jquery ajax调用的表单.

所以我有一个按钮,它可以:

       $("input:checked").parent("form").submit();

那么每一行都有:

            <form name="MyForm<%=i%>" action="javascript:processRow(<%=i%>)" method="post" style="margin:0px;">
                <input type="checkbox" name="X" value="XChecked"/>
                <input type="hidden" id="XNumber<%=i%>" name="X<%=i%>" value="<%=XNumber%>"/>
                <input type="hidden" id="XId<%=i%>" name="XId<%=i%>" value="<%=XNumber%>"/>
                <input type="hidden" id="XAmt<%=i%>" name="XAmt<%=i%>" value="<%=XAmount%>"/>
                <input type="hidden" name="X" value="rXChecked"/>
            </form>

此表单提交给processRow:

   function processRow(rowNum)
   {
        var Amount = $('#XAmt'+rowNum).val();
        var XId = $('#XId'+rowNum).val();
        var XNum = $('#OrderNumber'+rowNum).val();
        var queryString = "xAmt=" + "1.00" + "&xNumber=" + OrdNum + "&xId=" + xId;


        $('#coda_'+rowNum).removeClass("loader");
        $('#coda_'+rowNum).addClass("loading");


        $.ajax({
          url: "x.asp",
          cache: false,
          type:  "POST",
          data:  queryString,
          success: function(html){
            $('#result_'+rowNum).empty().append(html);
            $('#coda_'+rowNum).removeClass("loading");
            $('#coda_'+rowNum).addClass("loader");
          }
        });
   }

我想知道的是,有没有一种方法可以判断我的所有Ajax调用是否都已完成.原因是希望在所有这些呼叫发生时启用/禁用提交按钮.

谢谢,请注意,由于应用程序的敏感性,我不得不修改我的变量名,所以很多变量名可能是重复的.

推荐答案

The easy way

最简单的方法是使用.ajaxStop() event handler:

$(document).ajaxStop(function() {
  // place code to be executed on completion of last outstanding ajax call here
});

The hard way

您还可以手动检测任何ajax调用是否仍处于活动状态:

Create a variable containing number of active Ajax connections:

var activeAjaxConnections = 0;

就在打开新Ajax连接之前,递增该变量

$.ajax({
  beforeSend: function(xhr) {
    activeAjaxConnections++;
  },
  url (...)

in success part check if that variable equals to zero (if so, the last connection has finished)

success: function(html){
  activeAjaxConnections--;
  $('#result_'+rowNum).empty().append(html);
  $('#coda_'+rowNum).removeClass("loading");
  $('#coda_'+rowNum).addClass("loader");
  if (0 == activeAjaxConnections) {
    // this was the last Ajax connection, do the thing
  }
},
error: function(xhr, errDesc, exception) {
  activeAjaxConnections--;
  if (0 == activeAjaxConnections) {
    // this was the last Ajax connection, do the thing
  }
}

如您所见,我还添加了判断返回错误的功能

Jquery相关问答推荐

添加动态表单后,Select2 消失

如何使用 jQuery 的 drop 事件上传从桌面拖动的文件?

jQuery:如何动态检测窗口宽度?

如何像这样通过 $.ajax ( serialize() + extra data ) 添加数据

通过 .push() 方法向对象添加项目

如何使用 jQuery 禁用粘贴(Ctrl+V)?

如何将 JavaScript 对象编码为 JSON?

JavaScript 中的循环计时器

ASP .NET MVC 在每个字段级别禁用客户端验证

用jquery查找div底部的位置

确定 JavaScript 值是否为整数?

使用 Javascript|jQuery 删除特定的内联样式

Jquery - 如何获取样式显示属性无/块

带有 jquery 的 jsonp

消除移动 Safari 中点击事件的 300 毫秒延迟

jQuery Uncaught TypeError: 对象 [object Window] 的属性$不是函数

如何使用 javascript 展开和折叠

在jQuery中获取列表元素内容的数组

CORS - 如何预检httprequest?

粘性侧边栏:向下滚动时固定在底部,向上滚动时固定在顶部