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。