私はこれまで延期を使用したことはありませんが、それらについて少し読んだことがあり、私の理解から、それらは私が抱えている現在の問題の解決策になると思われます。4つの広告をロードする必要があるページがあります。以前は、サーバーが各広告についてデータベースにクエリを実行するのに時間がかかるため、ページの速度が低下していました。そこで、バナー広告の呼び出しをWebサービスに移動しました。これは問題なく機能しましたが、広告がない場合はコンテナdivを非表示にする必要があるため、すべてのajax呼び出しがいつ完了したかを確認してから、広告が読み込まれたかどうかを確認する必要があります。
Webサービスを正常に呼び出して広告を読み込む次のコードがありますが、then()関数が正しく機能していないようです。ajax呼び出しが完了する前に実行されているようです。このページからコードを取得しました。JQueryは.each()で延期されましたが、唯一の違いは、それらの例では、延期された範囲内で関数呼び出しを返すことを示していることです。しかし、関数の内部を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();
});