1

尝试使用 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 调用,消息仍然会更改。有谁知道如何解决这个问题?非常感谢任何建设性的帮助。谢谢。

4

1 回答 1

4

$.when()不带数组。
当你传递一个数组时(即使它是一个 Promise 数组),jQuery 将它视为一个已解析的值。

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

$.when.apply($, jqs).done(...);
于 2013-05-29T17:27:52.240 回答