我已阅读了关于jQuery的Deferred
对象,但我似乎无法理解它,这是我的问题,我得到以下代码:jQuery - 当所有ajax都完成时执行动作
function preprocess(form) {
$(form).find(".input input").each(function() {
var required = $(this).attr("required");
var checkField = $(this).closest(".inputcontainer").children(".check");
var errorField = $(this).closest(".inputcontainer").children(".errormessage");
if (typeof required !== 'undefined') {
$(checkField).each(function() {
$(this).css("color", "#FFFF00");
$(this).html("✘");
});
$(errorField).each(function() {
$(this).css("color", "#FFFF00");
$(this).html("(Required)");
});
}
else {
$(checkField).each(function() {
$(this).css("color", "#FFFF00");
$(this).html("✔");
});
$(errorField).each(function() {
$(this).css("color", "#000000");
$(this).html("");
});
}
});
$(form).find("datalist").each(function() {
var datalist = $(this);
callService({
name: "datalist_" + $(this).attr("id"),
data: { },
success: function(json) {
$(json).each(function() {
var html = "";
$(this.options).each(function() {
html += "<option value='" + this.value + "'>";
});
$(datalist).append(html);
});
}
});
});
$(form).find("select").each(function() {
var select = $(this);
callService({
name: "select_" + $(this).attr("name"),
data: { },
success: function(json) {
$(json).each(function() {
var html = "";
$(this.options).each(function() {
html += "<option value='" + this.id + "'>" + this.value + "</option>";
});
$(select).append(html);
});
}
});
});
}
此代码准备一种形式是准备呈现给用户,其中包括AJAX调用,这是我裹在callService({});
电话,你可以看到如下:
- 它检查输入并在字段旁边放置可能的
(Required)
。 (无AJAX) - 它动态加载
<datalist>
和<select>
的选项。 (AJAX)
然后我也有以下的(简化):
function setContent(html, url) {
html = $.parseHTML(html);
$(html).filter("form").each(function() {
preprocess($(this));
});
$("#pagemain").html(html);
}
这得到html
从AJAX调用,然后调用各种形式preprocess
并更新#pagemain
。
但是现在数据正在显示之前preprocess
已经完全完成。
问题:我怎样才能做到$("#pagemain").html(html);
后preprocessed
,涉及AJAX过程中已经完成了吗?
我觉得你的代码是明确的,但是你可以张贴一些更多的解释究竟怎么了'延期的对象与我的解决方案相互作用? – skiwi
@skiwi:我在代码中添加了更多评论。希望这是明确的 –
好吧,我想我知道了,我也在我的网站上实现了它,它立即工作,所以+1!我会尝试为我自己制定第二个用例。 – skiwi