109

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

4

7 回答 7

157

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

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

这将与当前使用的匹配,$.getJSON()如下所示:

$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});
于 2010-05-04T13:51:03.833 回答
48

两个答案都是错误的。你可以。你需要打电话

$.ajaxSetup({
async: false
});

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

于 2011-07-13T09:29:25.177 回答
20

我觉得你们俩都是对的。后面的答案工作正常,但它就像设置一个全局选项,所以你必须执行以下操作:

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });
于 2013-05-21T16:43:27.597 回答
11

就我而言,Jay D 是对的。我必须在通话之前添加这个。

$.ajaxSetup({
    async: false
});

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

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));

它可以找到。然后我改为

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

警报未定义。

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

$.ajaxSetup({
    async: false
});
var jsonData= (function() {
    var result;
    $.getJSON('data.txt', {}, function(data){
      result = data;
    });
    return result;
})();
alert(JSON.stringify(jsonData));
于 2016-03-28T07:22:09.020 回答
1

If you just need to await to avoid nesting code:

let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
    json = data;
    done();
}));
于 2018-08-20T23:38:38.527 回答
0

我认为您不能在那里设置该选项。您必须使用带有适当参数的jQuery.ajax()(基本上 getJSON 也只是将该调用包装到更简单的 API 中)。

于 2010-05-04T13:03:15.280 回答
0

滚动你自己的例如

function syncJSON(i_url, callback) {
  $.ajax({
    type: "POST",
    async: false,
    url: i_url,
    contentType: "application/json",
    dataType: "json",
    success: function (msg) { callback(msg) },
    error: function (msg) { alert('error : ' + msg.d); }
  });
}

syncJSON("/pathToYourResouce", function (msg) {
   console.log(msg);
})
于 2015-12-04T08:37:06.453 回答