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

标签 javascript jquery ajax synchronous

我在同步调用方面遇到一些问题, 并且似乎无法准确理解出了什么问题。

调试代码时,它完美地填充了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 and dataType: "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/

相关文章:

jquery - 以数组格式传递数据

javascript - 每 30 秒运行一次 ajax 并显示倒数计时器

javascript - 如何防止在 .load() 之后第二次加载 div

jquery - Bootstrap使用Jquery和ajax切换切换功能

javascript - 在 JavaScript/jQuery 中连接字符串?

javascript - 客户端或服务器正在删除变音符号

Javascript 加载顺序

java - GWT 客户端代码中的 volatile 变量

javascript - 在 html 中输入日期和时间(来自用户)并在 Javascript 中接收的最佳方法是什么?

javascript - 如何使用 Razor 检查是否在 View 页面中选中了复选框,如果选中则显示文本框