javascript - ajax .done 运行不正常,似乎跳过了代码

标签 javascript ajax jquery

我在 .each 函数中运行了下面的代码。但是,当所有设置和完成并且我执行 alert(inserted); 或任何其他变量的警报时,它们会出现 0 这是我在声明时设置的他们。我确信它们在范围内。我觉得这与 ajax 的时间有关,因为如果我在每次通话后发出警报,计数器系统就会工作。任何想法?此外,我确信在我附加警报时调用了正确的 if 语句(正如我上面所说的,当我这样做时计数器工作)并且它们正确地触发并且没有从控制台提出的错误代码。

$.ajax({
    type: "POST",
    url: "/php/filename.php",
    data: {
        one: $('#1').val(),
        two: $('#2').val(),
        three: $('#3').val(),
        four: $('#4').val(),
        five: $('#5').val(),
        six: $('#6').val(),
        seven: $('#classlist').val(),
        id: $('#7').html()
    }
}).done(function(msg) {
    if (msg == "inserted") {
        inserted++;
    }
    else if (msg == "updated") {
        updated++;
    }
    else if (msg == "duplicate") {
        duplicate++;
    }
    else if (msg == "0") {
        fail++;
    }
});

最佳答案

Ajax 是异步的,您的警报在 ajax 完成之前发生。将所有 ajax 返回值存储在一个数组中,将它们全部传递给 .when,然后使用它完成来提醒变量的值。

var promiseArr = [], inserted = 0;

for (var i = 0; i < 30000; i++) { // <--- unrealistic number of iterations
    promiseArr.push($.ajax({url:"foo.php?id=" + i}).done(function(){
        inserted++;
    }));
}
$.when.apply($,promiseArr).done(function(){
    alert(inserted);
});

关于javascript - ajax .done 运行不正常,似乎跳过了代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961622/

相关文章:

javascript - 如何将 JavaScript 框架与 Opa 一起使用

javascript - 使用 flexbox 垂直对齐内容

javascript - 如何解决 Ajax 上的 Invalid JSON Primitive 错误?

javascript - 使 jqGrid 中的列不可隐藏

javascript - JQuery 函数根据隐藏的 HTML 输入元素的值显示元素

javascript - 尽管 JS 函数更改了元素属性,但 IE8 v8 未更改 DOM 元素的类

javascript - CKEditor ul 外壳

jquery - 如何缓存从 Ajax 调用接收到的数据?

javascript - 如何在不使用 ajax 刷新的情况下在页面上显示我的 php 响应?

jQuery:选择属性大于值的所有元素