带有ajax数组的JQuery $.when [重复]

Posted

技术标签:

【中文标题】带有ajax数组的JQuery $.when [重复]【英文标题】:JQuery $.when with ajax array [duplicate] 【发布时间】:2013-05-14 20:14:46 【问题描述】:

我正在尝试让$.when 使用我的代码。情况是我有一个触发大量 Ajax 请求的方法,我想在请求符文时为用户显示加载屏幕。什么时候是这样我以后可以隐藏它。鉴于我对$.when 的了解,以下代码应该可以工作,但永远不会触发 when 函数。

self.createTaggingDialog(self);
var ajaxArray = new Array();
self.containers.each(function () 
    var ImageClass = $(this).ImageTags();
    if (ImageClass != null) 
        ajaxArray.push(ImageClass.TagUser(ImageClass, username));
    
);
$.when(ajaxArray, function () 
    console.log("DONE!");
    self.RemoveTagggingDialog(self);
);

这是ajaxArray 到达$.when 时的值

标签用户:

TagUser(self: ImageTags, username: string) 
    return $.ajax(
        type: "POST",
        url: self.options.UrlTagUser,
        data: 
            username: username,
            imageid: self.options.ImageId
        ,
        success: function (data: UserAddJson) 
            if (data.Successful) 
                if (self.AddUserElement != null) 
                    self.AddUserElement.find('input').val('');
                    self.AddUserElement.modal('hide');
                
                self.TagUserSuccess(self, data);
             else 
                self.TagUserError(self, data.Message);
            
        ,
        error: function (XMLHttpRequest, textStatus, errorThrown) 
            self.TagUserError(self, "");
        
    );

【问题讨论】:

我假设self.containers.each 不是异步的,那么为什么需要一个通常用于延迟的jQuery.when?只需将回调中的代码放在下面的集合中循环... 【参考方案1】:

试试

$.when.apply($, ajaxArray).done(function () 
    console.log("DONE!");
    self.RemoveTagggingDialog(self);
);

【讨论】:

您不应该将$ 作为上下文而不是window 传递吗? @m90 是的可能必须 @m90 这个样本jsfiddle.net/arunpjohny/qJ6fY 似乎使用window 作为第一个参数 这行得通,但现在该函数立即被触发,它不需要等待 ajax 请求完成 @DoomStone ImageClass.TagUser(ImageClass, username) 返回什么

以上是关于带有ajax数组的JQuery $.when [重复]的主要内容,如果未能解决你的问题,请参考以下文章

等待 jQuery.when ajax 请求

无论如何要传递 jquery deferred $.when 一个数组? [复制]

带有 AJAX 的 JQuery 需要用多维数组创建手风琴

jquery - 使用 .done()、.then() 和 .when() 以给定顺序发出 ajax 请求

有条件地添加到 jQuery .when

jQuery ajax 调用后 IE 7 重定向