尝试使用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调用,消息仍然会被更改。有没有人知道如何解决这个问题?非常感谢任何建设性的帮助。感谢。
答案 0 :(得分:4)
$.when()
不接受数组
当你传递一个数组时(即使它是一个promises数组),jQuery会将它视为一个已解析的值。
要传递多个承诺,您需要调用.apply
将每个承诺作为单独的参数传递:
$.when.apply($, jqs).done(...);