是否可以将async:false设置为$ .getJSON调用

ACP*_*ACP 100 jquery asynchronous getjson

是否可以async: false在调用时设置$.getJSON()以便调用阻塞而不是异步?

Nic*_*ver 152

您需要$.ajax()同步使用它来进行调用,如下所示:

$.ajax({
  url: myUrl,
  dataType: 'json',
  async: false,
  data: myData,
  success: function(data) {
    //stuff
    //...
  }
});
Run Code Online (Sandbox Code Playgroud)

这将匹配当前使用$.getJSON()如下:

$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});
Run Code Online (Sandbox Code Playgroud)

  • 我发现方便方法$ .getJSON()几乎从来没用过,总是最后使用$ .ajax(). (21认同)
  • 刚刚遇到以下新问题:"工作之外的同步XMLHttpRequest正在从Web平台中删除,因为它对最终用户的体验产生了不利影响.(这是一个需要很多年才能完成的漫长过程.)开发人员必须当条目设置对象的全局对象是一个Window对象时,不要为异步参数传递false.强烈建议用户代理在开发人员工具中警告这种用法,并且可能会在发生时抛出InvalidAccessError异常. (2认同)

vel*_*lja 44

两个答案都错了.您可以.你需要打电话

$.ajaxSetup({
async: false
});
Run Code Online (Sandbox Code Playgroud)

在你的json ajax电话之前.并且您可以在调用retuns后将其设置为true(如果您希望它们异步,则页面上还有其他ajax用法)

  • 这是一个迟到的评论,但......这两个错误的"两个"答案是什么?我看到@Nick Craver的回答是可接受的,而不是全局AJAX设置的"混乱"(如果其他请求同时触发) (7认同)
  • 你能不能指点我说不出来的地方? (4认同)
  • 这是一个非常低质量的答案 (3认同)

web*_*dev 17

我想你们两个都是对的.后面的答案工作正常但它就像设置一个全局选项,所以你必须做以下事情:

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });
Run Code Online (Sandbox Code Playgroud)


ron*_*run 7

就我而言,Jay D是对的.我必须在通话前加上这个.

$.ajaxSetup({
    async: false
});
Run Code Online (Sandbox Code Playgroud)

在我以前的代码中,我有这个:

var jsonData= (function() {
    var result;
    $.ajax({
        type:'GET',
        url:'data.txt',
        dataType:'json',
        async:false,
        success:function(data){
            result = data;
        }
    });
    return result;
})();
alert(JSON.stringify(jsonData));
Run Code Online (Sandbox Code Playgroud)

它很有用.然后我改为

var jsonData= (function() {
    var result;
    $.getJSON('data.txt', {}, function(data){
      result = data;
    });
    return result;
})();
alert(JSON.stringify(jsonData));
Run Code Online (Sandbox Code Playgroud)

警报未定义.

如果我添加这三行,警报会再次显示数据.

$.ajaxSetup({
    async: false
});
var jsonData= (function() {
    var result;
    $.getJSON('data.txt', {}, function(data){
      result = data;
    });
    return result;
})();
alert(JSON.stringify(jsonData));
Run Code Online (Sandbox Code Playgroud)