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

时间:2014-04-16 19:52:57

标签: jquery ajax

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

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

以下是代码的基本方案:

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请求。

2 个答案:

答案 0 :(得分:2)

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

但是,这样做这样的递归AJAX调用通常是一个坏主意。如果调用超时,则表明服务器端实现存在性能问题。

答案 1 :(得分:0)

您可以使用进度变量来跟踪完成时间:

var progress = 0;

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

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

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