javascript中的同步调用,但未处理同步调用
我在同步呼叫方面遇到一些问题, 而且似乎不知道到底出了什么问题 调试代码时,它完美地填充了songTracks数组, 直到return语句,在那里它再次为空 代码示例:javascript中的同步调用,但未处理同步调用,javascript,jquery,ajax,synchronous,Javascript,Jquery,Ajax,Synchronous,我在同步呼叫方面遇到一些问题, 而且似乎不知道到底出了什么问题 调试代码时,它完美地填充了songTracks数组, 直到return语句,在那里它再次为空 代码示例: function getAllSongIds(lijstId){ var songTracks = []; $.ajax({ url: "http://somehost.com/lists/"+lijstId+"/editions/", dataType: "jsonp", asyn
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;
};
JSONP总是异步的。async:false设置被忽略。从:
[…]如果需要同步请求,请将此选项设置为false。跨域请求和数据类型:jsonp请求不支持同步操作
为什么?
JSONP实际上与Ajax无关。jQuery只提供了一个函数来处理这两个问题。JSONP只是在文档中添加一个元素。浏览器将异步加载这些脚本
有关可能的异步解决方案,请参阅。欢迎来到回调地狱和循环XHR调用之地。我建议您查看jQuery的promise特性。问题是,您的代码没有等待XHR返回,而是继续运行,因此您的成功函数被延迟延迟所扭曲,甚至没有读取async:false。使用async无法同步我的坏消息:False未读取JSONP部分。。。