Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的同步调用,但未处理同步调用_Javascript_Jquery_Ajax_Synchronous - Fatal编程技术网

javascript中的同步调用,但未处理同步调用

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

我在同步呼叫方面遇到一些问题, 而且似乎不知道到底出了什么问题

调试代码时,它完美地填充了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;
};
JSONP总是异步的。async:false设置被忽略。从:

[…]如果需要同步请求,请将此选项设置为false。跨域请求和数据类型:jsonp请求不支持同步操作

为什么?

JSONP实际上与Ajax无关。jQuery只提供了一个函数来处理这两个问题。JSONP只是在文档中添加一个元素。浏览器将异步加载这些脚本


有关可能的异步解决方案,请参阅。

欢迎来到回调地狱和循环XHR调用之地。我建议您查看jQuery的promise特性。问题是,您的代码没有等待XHR返回,而是继续运行,因此您的成功函数被延迟延迟所扭曲,甚至没有读取async:false。使用async无法同步我的坏消息:False未读取JSONP部分。。。