在javascript中同步调用,但不处理同步

时间:2014-08-11 19:07:47

标签: javascript jquery ajax synchronous

我遇到了同步通话的一些问题, 并且似乎无法准确理解出了什么问题。

调试代码时,它完全填满了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;
};

1 个答案:

答案 0 :(得分:7)

JSONP 始终是异步的。简单地忽略async: false设置。来自documentation

  

[...]如果您需要同步请求,请将此选项设置为false。跨域请求和dataType: "jsonp"请求不支持同步操作。

<强>为什么吗

JSONP实际上与Ajax无关。 jQuery只提供单一功能来处理两者。 JSONP只不过是在文档中附加<script>元素。浏览器将异步加载这些脚本。

有关可能的(异步)解决方案,请参阅How do I return the response from an asynchronous call?