我在同步调用方面遇到一些问题, 并且似乎无法准确理解出了什么问题。
调试代码时,它完美地填充了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;
};
最佳答案
JSONP 始终是异步的。 async: false
设置被简单地忽略。来自 documentation :
[...] If you need synchronous requests, set this option to
false
. Cross-domain requests anddataType: "jsonp"
requests do not support synchronous operation.
为什么?
JSONP实际上与Ajax无关。 jQuery 只是提供一个函数来处理这两者。 JSONP只不过是附加一个 <script>
文档的元素。浏览器将异步加载这些脚本。
参见How do I return the response from an asynchronous call?可能的(异步)解决方案。
关于javascript - javascript中的同步调用,但未处理同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250595/