我有一系列的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请求。
答案 0 :(得分:2)
您可以使用计数器来确定上次请求何时完成。在ajaxProcessCategories()
开头递增计数器,并在成功回调结束时递减计数器。当计数器达到零时,你就完成了。
但是,这样做这样的递归AJAX调用通常是一个坏主意。如果调用超时,则表明服务器端实现存在性能问题。
答案 1 :(得分:0)
您可以使用进度变量来跟踪完成时间:
var progress = 0;
$(function() {
$(document)
.ajaxStart(function() {
progress++;
})
.ajaxComplete(function() {
progress--;
if (progress == 0) {
//do finished actions
}
});
});
ajaxStart和ajaxComplete附加到文档以跟踪所有jquery ajax调用。