【发布时间】:2014-08-12 03:16:54
【问题描述】:
我在同步调用方面遇到了一些问题, 并且似乎无法准确理解出了什么问题。
在调试代码时,它完美地填满了 songTracks 数组, 直到返回语句,它又是空的。
代码示例:
function getAllSongIds(lijstId){
var songTracks = [];
$.ajax({
url: "http://somehost.com/lists/"+lijstId+"/editions/",
dataType: "jsonp",
async: false,
success: function(json){
for (i in json.editions) {
$.ajax({
url:"http://somehost.com/lists/"+lijstId+"/editions/"+json.editions[i].id,
dataType:"jsonp",
async: false,
success: function(json2){
for(j in json2.tracks){
if(songTracks.indexOf(json2.tracks[j].id) === -1){
songTracks.push(json2.tracks[j].id);
}
}
}
})
};
}
});
alert(songTracks);
return songTracks;
};
【问题讨论】:
-
欢迎来到回调地狱,循环 XHR 调用。我建议你看看 jQuery 的 promise 特性。问题是您的代码不会等待 XHR 返回,而是继续前进,因此您的成功函数会因延迟而出现偏差
-
甚至没有读到 async:false。我的坏
-
JSONP 无法使用
async:false进行同步 -
没有阅读 JSONP 部分...
标签: javascript jquery ajax synchronous