我以前没有使用过延迟,但我在这里和那里读过一些关于它们的内容,据我了解,听起来它们可以解决我当前遇到的问题。我有一个页面必须加载 4 个广告。以前,由于服务器为每个广告查询数据库需要时间,因此页面速度变慢。因此,我将横幅广告调用移至 Web 服务。这很好用,但是如果我没有广告,我需要隐藏容器 div,这意味着我需要知道所有 ajax 调用何时完成,然后检查是否加载了任何广告。
我有以下代码可以成功调用 Web 服务并加载广告,但 then() 函数似乎没有正常工作。它似乎在 ajax 调用完成之前执行。我从这个页面得到了我的代码JQuery deferred with .each(),我能看到的唯一区别是,在他们的例子中,它显示了在 deferred 中返回函数调用。但是我尝试用 return{} 包围我的函数内部,但它只是抛出一个错误(意外的令牌“=”)。谁能告诉我我做错了什么?谢谢。
var deferreds = $(".ad").map(function () {
var t = $(this);
$.ajax({
type: "POST",
url: "/Services/Services.asmx/GetBanner",
data: "{'bannerId':" + t.attr("bannerid") + ",'siteId':" + sid + ",'dt':'" + new Date().toString() + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json"
})
.success(function(data) {
if (data.d.Banner != null && data.d.Banner != undefined) {
t.html("<div class=\"featuredAd\">" + data.d.Banner + "</div>");
}
});
});
$.when.apply(null, deferreds.get()).then(function () {
if($(".featuredAd").length > 0)
$("#dvFeaturedBottom").show();
});