jquery ajax()异步错误
我有问题jquery ajax()异步错误,jquery,ajax,asynchronous,Jquery,Ajax,Asynchronous,我有问题 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(da
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");
});
用于(a=1;a如果您希望用户能够在ajax调用运行时使用该界面,则应将async
更改为true
。James Allardice还指出,在这种情况下,您需要使用javascript闭包在返回ajax调用时保留原始id
的值。F或者更多关于javascript闭包的信息,这是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));
}
for(id=1;id<10;id++){
$(“.div”)。追加(“”);
(功能(id){
$.ajax({
url:“file.php”,
数据:“a=”+id,
类型:“POST”,
async:true,
成功:功能(数据){
$(“#”+id).html(数据);
}
});
}(id));
}
一个很好的解决方案是使用递归函数
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);
函数appendDivs(限制、计数){
计数=计数| | 1;
如果(count)是的,但是如果我这样做了,我不会在每个创建的div中都只在最后一个div中有数据,因为for()会更快。您需要将ajax
调用包装在一个闭包中,以在每次迭代中捕获a
的值。您认为是$(/div”)。每个(函数(){ajax};?如果是,我尝试了,但它也不起作用:(@dontHaveName put$(“.div”).append(“”;
)在success函数中,希望您能获得所需的输出。@Josh Mein我在函数中也有该代码,因此我创建了新的函数id(),并将您的代码添加到该函数中,在追加代码后我调用id()但是,仅仅注意到这一点仍然不起作用。这是一件小事,可以被视为我的偏好,但总是值得花时间想出好的变量名。这可能会让那些在你后面的人感到沮丧,他们看到的只是一个字符的变量名。我想在我的答案中给出一个更好的变量名,但我不知道你的情景o。