我有问题..
for(a=1;a<10;a++){
$(".div").append("<div id="+a+"></div>")
$.ajax({
url: "file.php",
data: "a="+a,
type: "POST",
async: false,
success: function(data) {
$("#"+a).html(data);
}
});
}
$("div").click(function(){
alert("it works");
});
问题是:
我没有把来自 file {.php 的async: false
数据放在最后一个div中,所以id为9
但现在有async: false
- 所以数据在每个div中都是好的
但如果我想点击它是由ajax加载它不起作用(只有在完成所有ajax-es之后)
如何解决这个问题? (也许错误的是我使用的是ajax。我可以使用getJSON等...)
感谢您的帮助
答案 0 :(得分:26)
如果您希望用户在ajax呼叫运行时能够使用该界面,则应将async
更改为true
。 James Allardice也注意到,在这种情况下,您需要使用javascript闭包来保留原始id
的值,以便在返回ajax调用时使用。有关javascript闭包的更多信息,请查看how-do-javascript-closures-work,这是一个在stackoverflow上找到的非常好的问题。
for(id = 1; id < 10; id++){
$(".div").append("<div id='" + id + "'></div>");
(function(id) {
$.ajax({
url: "file.php",
data: "a=" + id,
type: "POST",
async: true,
success: function(data) {
$("#"+ id).html(data);
}
});
}(id));
}
答案 1 :(得分:1)
一个很好的解决方案是使用递归函数。
function appendDivs(limit, count) {
count = count || 1;
if (count <= limit) {
$(".div").append("<div id=" + count + "></div>");
$.ajax({
url: "file.php",
data: "a=" + count,
type: "POST",
async: true,
success: function(data) {
$("#" + count).html(data);
appendDivs(limit, count + 1);
},
error: function(e) {
alert('Error - ' + e.statusText);
appendDivs(limit, count + 1);
}
});
} else {
return false;
}
}
appendDivs(10);