请帮助我根据我的情况创建正确的事件。我相信有 真正的方法做到这一点,没有任何计数器(像这样: How to know when all ajax calls are complete )
HTML:
<ul id="links">
<li><a href="1.html">What is Yoda's first name?</a></li>
<li><a href="2.html">Why does Padme die?</a></li>
<li><a href="3.html">Who is Darth Rage?</a></li>
</ul>
<div id="content"></div>
jQuery:
$('#links a').each(function (index, el) {
url = $(el).attr('href');
$('<div class="article" />').appendTo('#content')
.load(url, function(){
filterOneArticle(this);
});
});
// I want this function run after all articles will be loaded and filtered
$.bind('yepAllArticlesHaveBeenLoaded', filterAllArticles);
filterAllArticles = function() {};
filterOneArticle = function(el) {};
最佳答案
如果出于某种原因您不想像 Nick 建议的那样使用 ajaxStop
(也许您担心其他不相关的 ajax 请求会让您失望),您可以跟踪有多少请求您已发出并检查每一个何时成功/失败:
var requestCount = 0;
$('#links a').each(function (index, el) {
url = $(el).attr('href');
++requestCount;
$('<div class="article" />').appendTo('#content')
.load(url, function(){
filterOneArticle(this);
--requestCount;
if (requestCount == 0) {
filterAllArticles();
}
});
});
看起来它有一个竞争条件(如果第一篇文章在我们请求第二篇文章之前完成加载怎么办?),但事实并非如此。浏览器上的 JavaScript 是单线程的(禁止使用 web workers ,您必须显式执行此操作),因此我们知道我们将在第一次完成之前完成启动请求的循环。
关于javascript - 如何创建一些ajax调用完成后触发的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4304232/