首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何定义ajax请求链的最后一个请求

如何定义ajax请求链的最后一个请求
EN

Stack Overflow用户
提问于 2014-04-16 19:52:57
回答 2查看 265关注 0票数 0

我有一系列ajax请求。它们用于将类别树从一个父类树复制到另一个父类树。如果复制的任何类别都有子类别,则会再次运行ajax请求。只有在没有任何子类别之后,此循环才会结束。

当有太多的子类别时,处理ohe请求中的所有子类别会导致服务器超时错误,这就是为什么单独的ajax请求被用于子类别。

以下是代码的基本方案:

代码语言:javascript
运行
复制
function ajaxProcessCategories(arguments){
  $.ajax({
    ...
    success: function(jsonData)
    { 
      ...
      if(jsonData.hasOwnProperty('children'))
        for (var i in jsonData.children)
          ajaxProcessCategories(arguments);
    },
    ...
  });
}

效果很好。类别被正确复制。

但是,当复制过程结束时,我无法找到显示消息的方法。问题是,在ajax成功时,还不知道是否会发送任何其他请求。

那么,是否有可能在函数中定义最后一个ajax请求?类似于.ajaxStop()。但是ajaxStop()适用于$(document)中的所有ajax请求。我需要在我的函数中找到最后一个ajax请求。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-16 19:58:44

您可以使用计数器来确定上一次请求何时完成。在ajaxProcessCategories()开始时增加计数器,在成功回调结束时减少计数器。当计数器达到零时,您就完成了。

但是,进行类似于此的递归AJAX调用通常是个坏主意。如果调用超时,则指向服务器端实现的性能问题。

票数 2
EN

Stack Overflow用户

发布于 2014-04-16 20:11:44

您可以使用进度变量来跟踪完成后的情况:

代码语言:javascript
运行
复制
var progress = 0;

$(function() {
    $(document)
        .ajaxStart(function() {
            progress++;
        })
        .ajaxComplete(function() {
            progress--;

            if (progress == 0) {
                //do finished actions
            }
        });
});

ajaxStartajaxComplete附加到文档中以跟踪所有jquery调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23118899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档