在JQUERY中如何找到页面中的所有ajax调用已经完成?
我希望在完成所有ajax调用后执行一个方法。
答案 0 :(得分:4)
如果您正在运行大量请求并且想要知道它们何时完成,那么您正在寻找$.ajaxStop()
,这是一个全局事件,并且在所有AJAX请求完成时被调用“,according to the documentation。
答案 1 :(得分:3)
如果您知道通过在每次通话中增加一些变量发送了多少次ajax通话。您可以在ajax调用成功时使用另一个变量来计算多次成功调用的方式。当两个变量具有相同的值时,您可以假设所有的ajax调用都已完成。
答案 2 :(得分:2)
这是他们示例中的代码:
$.when( getTweets('austintexasgov'),
getTweets('greenling_com'),
getTweets('themomandpops')
).done(function(atxArgs, greenlingArgs, momandpopsArgs){
var allTweets = [].concat(atxArgs[0]).concat(greenlingArgs[0]).concat(momandpopsArgs[0]);
var sortedTweets = sortTweets(allTweets);
showTweets(sortedTweets);
});
var getTweets = function(user){
var url='http://twitter.com/status/user_timeline/' + user + '.json';
return $.get(url, {count:5}, null, 'jsonp');
}
对我来说很完美
答案 3 :(得分:1)
要监视此类任务,您始终可以构建状态机。在每次ajax调用时,添加beforeSend()
回调和complete()
回调以将状态更新到某个状态机。如果计数为0,则状态机上的completed
方法将有条件地执行代码。
注意......如果存在重叠执行的ajax调用(并行运行),这将仅起作用。如果您有串行运行的ajax调用,则每次所有活动 ajax调用都处于已完成状态时,您的状态机将执行。
要正确使用串行ajax调用,您必须事先知道要调用多少个ajax调用,然后针对该数字进行测试。
$.ajax({
url: "test.html",
}).beforeSend(function() {
ajaxState.started();
}).complete(function() {
ajaxState.completed();
});
var ajaxState = {
active: 0,
started: function() {
ajaxState.active++;
},
completed: function() {
ajaxState.active--;
if (!ajaxState.active) ajaxState.onComplete();
},
onComplete: function() {
// Your code here.
}
};
答案 4 :(得分:0)
也许你在最后一个Ajax方法中调用了一个方法?没有办法知道你是否通过一个按钮进行任何Ajax调用,例如动态生成或者其他什么。
如果您确定上次调用Ajax,请在成功时调用方法。
$.ajax({
url: "test.html",
type: "POST",
data: {id : menuId},
}).done(function() {
callMethod();
});