javascript - 如何创建一些ajax调用完成后触发的事件?

标签 javascript jquery ajax event-handling jquery-events

请帮助我根据我的情况创建正确的事件。我相信有 真正的方法做到这一点,没有任何计数器(像这样: 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/

相关文章:

javascript - 如何保存对象实例(和选项)以便将来应用方法

javascript - 将多个参数传递给函数

javascript - 当您单击一个页面的链接时,更改另一个页面中同一菜单的链接的颜色

javascript - 如何从 $ ('p' 的集合中删除所有类?

javascript - Google Closure Compiler 为命名空间创建的别名不完整

javascript - 如何从 Angular 4的html中获取属性值

c# - 如何在 C# 中将自定义异常序列化为 json

ajax - 内容类型 text/json 是否具有安全隐患?

javascript - 如何使用 ajax/jquery/php 制作类似 stackoverflow 的投票系统(高效)

javascript - 将自定义 ajax 按钮添加到 WooCommerce 管理订单列表