带有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 deferred $.when 一个数组? [复制]