我遇到了同步通话的一些问题, 并且似乎无法准确理解出了什么问题。
调试代码时,它完全填满了songTracks数组, 直到return语句,它再次为空。
代码示例:
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;
};
答案 0 :(得分:7)
JSONP 始终是异步的。简单地忽略async: false
设置。来自documentation:
[...]如果您需要同步请求,请将此选项设置为
false
。跨域请求和dataType: "jsonp"
请求不支持同步操作。
<强>为什么吗
JSONP实际上与Ajax无关。 jQuery只提供单一功能来处理两者。 JSONP只不过是在文档中附加<script>
元素。浏览器将异步加载这些脚本。
有关可能的(异步)解决方案,请参阅How do I return the response from an asynchronous call?。