javascript - 在 ajax 调用完成之前过早出现 jQuery.when() 语句

标签 javascript jquery

尝试使用 jquery 和 ajax 更改最初在我的页面上打印的消息:

document.write('<p align="center" id="DataReady">Waiting for server to update the table</p>');

在完成所有 ajax 调用并更新我的数据后,再做其他事情。我的代码大纲如下:

function getData(m) {

    jqs[m] = $.ajax({
        url : WebURL[m],
        type : 'GET',
        dataType: 'jsonp',
        myJ : m
    });
    return jqs[m];
}


function handleData(json_data){

    var j = this.myJ;

    // Inside this function, I manipulate the json_data 
    // object and store it into other variables
}   

$(document).ready(function() { 

    for (var i=0; i<5; i++){
        getData(i).done(handleData); 
    }

    $.when(jqs).done(function(){
        document.getElementById("DataReady").innerHTML = "Up to date!"
    });
});

当文档准备好后,我基本上循环遍历我的 getData 函数并使用延迟对象执行 ajax 调用,当每个相应的 ajax 调用完成时,handleData 函数获取 json 数据(特定于每个相应的 ajax 调用)和操纵它以供进一步使用。

但是,一旦我遍历了所有的 ajax 调用(存储在 jqs 数组中),我似乎无法使最后一部分正常工作:我的 $.when 语句。我已经查看了 jquery API ( http://api.jquery.com/jQuery.when/ ),但似乎看不出我做错了什么。

我希望在最后一条语句中发生的是当所有 ajax 调用完成时(存储在数组 jqs 中),初始消息更改为“最新消息!”,但不会更早。现在看来,该消息正在更改为“最新!”即使 ajax 调用没有完成。更麻烦的是,如果我删除 getData(i).done(handleData); 行,即使没有发生 ajax 调用,消息仍然会发生变化。有谁知道如何解决这个问题?非常感谢任何建设性的帮助。谢谢。

最佳答案

$.when() 不接受数组。
当您传递一个数组(即使它是一个 promise 数组)时,jQuery 会将其视为已解析的值。

要传递多个 promise ,您需要调用 .apply 将每个 promise 作为单独的参数传递:

$.when.apply($, jqs).done(...);

关于javascript - 在 ajax 调用完成之前过早出现 jQuery.when() 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820237/

相关文章:

javascript - 附加 ID 而不替换原始 ID

javascript - 遍历 dom 从具有 id 和 class 的单击元素获取

c# - MVC 访问控制允许来源

jquery - 在页面底部制作一个div

javascript - CSS :hover not working after jquery load();

javascript - 使用模板库从 ajax 请求接收 json 数据后生成 html 代码的最佳方法是什么?

javascript - 当每个数组项都是函数调用时如何调用每个数组项

javascript - jQuery if 语句,检查变量是否在一段时间内为 true

jquery - 同时执行两个 jquery 函数

javascript - 使用 charCodeAt 转换时出现 NaN 错误