jQuery .each 同步化

4
我想使用jquery中的ajaxStop函数,但无法触发它,有什么建议吗?
我的目标是循环遍历每个锚点(anchor)标签,然后更新其中的一些内容,接下来我想使用ajaxstop事件来触发一个脚本,以根据更新重新组织这些锚点。
谢谢您的帮助。
jQuery(document).ready(function($) {
    function updateUsers() {
        $(".twitch_user").each(function(index, user) {
            $.ajax({ url: "https://api.twitch.tv/kraken/streams/" + $(user).attr("id") + "?callback=?", success: function(d) {
                if(d.stream) {
                    $(user).addClass("online");
                    $(user).removeClass("offline");
                    $(user).children(".viewers").text(d.stream.viewers + " viewers");
                } else {
                    $(user).addClass("offline");
                    $(user).removeClass("online");
                    $(user).children(".viewers").text("0 viewers");
                }
                console.log(d);
            }, dataType: "json"});
        });
    }
    //$(document).ajaxStart(function() {
    //  console.log("Event fired!");
    //  updateUsers().delay(2000);
    //})
    $(document).ajaxStop(function() {
        console.log("Event fired!");
        // updateUsers().delay(2000);
    });
    updateUsers();
});

1
从你的查询字符串中移除"?callback=?",或者只需使用"$ .get"而不是$ .ajax,这样ajaxStop将开始触发。 - anAgent
但是我会因为远程服务器而收到一个源错误吗? - user1981979
1个回答

3

此文献所述,当进行JSONP请求时,全局处理程序将被关闭:

不能保证JSONP请求的完成(因为无法捕获错误)。在这种情况下,jQuery 1.5强制将全局选项设置为false,以便内部ajax请求计数器最终能够回归零。

如果您打算使用JSONP,则URL末尾的?callback=?会使jQuery将其视为JSONP。

解决方案是设置以下内容:

jQuery.ajaxPrefilter(function( options ) {
    options.global = true;
});

感谢您的帮助和有用的解释 :) JSONP 是预期的解决方案,因为脚本在没有它的情况下由于起源错误而失败,再次致敬! - user1981979

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接