对不起标题;想不出一个简洁的方式来表达我的问题。我有一个小的 JQuery 脚本,可以进行两次 AJAX 调用(检索一些任意 xml)。我的问题是许多其他人似乎都遇到过的问题,但代码要简单得多。根据我的阅读,我的问题是 JQuery“点击”侦听器和其他一些进程之间的竞争条件。我尝试将代码拆分为两个单独的脚本,并使用“click”侦听器“延迟”一个(并在 HTML 正文的底部调用延迟脚本)。代码是:
function extractThread(){
var xmlSource;
xmlSource = $(this).attr("id");
xmlSource = "xml/" + xmlSource;
$.ajax({ type: "GET", url: xmlSource, cache: false, success: function(data) {
setUpThread(data);
}
});
}
pub.setup = function() {
var target, thread, posts;
target = $("#threadList");
$.ajax({ type: "GET", url: "xml/forum.xml", cache: false, success: function(data) {
$(target).append("<ul></ul>");
$(data).find("thread").each(function () {
thread = $(this).find("title")[0].textContent;
posts = $(this).find("posts")[0].textContent;
$(target).find("ul").append("<li><a href=\"#\" class=\"threadName\" id=\""+ posts +"\">" + thread + "</a>");
});
}
});
/* works if: alert(anyMsg); */
$(".threadName").click(extractThread);
};/*end setup*/
return pub;
}());
$(document).ready(GetThreads.setup);
extractThread 调用其他任意方法的地方。我不明白为什么这里有冲突;ajax不是已经返回成功了吗?我已经阅读了许多与我相同的其他问题,但我无法应用给出的建议(可能是因为现在是早上 7 点,而且我已经起床太久了)。普遍的共识似乎是“添加 alert() 使我的代码工作”表明某些异步事件的时间存在问题......这是我第一次在 StackOverflow(或任何编程板)上发帖,并且一般来说,我对 JavaScript 很陌生,所以如果我可以做些什么来澄清我的问题,或者有人对清理我的代码有任何建议,我将非常感激。干杯,山姆。注意:“远没有那么复杂”是指我的代码,
编辑:(因为我不知道如何“+1”,或将问题标记为已解决):感谢您的回复;没想到反应这么快。: $(document).on("click", ".threadName", extractThread); Artem 提供的解决方案完美运行,谢谢!