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

时间:2010-05-04 12:57:23

标签: jquery asynchronous getjson

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

7 个答案:

答案 0 :(得分:150)

您需要使用$.ajax()同步拨打电话,如下所示:

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

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

$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});

答案 1 :(得分:43)

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

$.ajaxSetup({
async: false
});
在你的json ajax调用之前

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

答案 2 :(得分:16)

我认为你们两个都是对的。后面的答案很好,但它就像设置一个全局选项,所以你必须做以下事情:

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });

答案 3 :(得分:7)

就我而言,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));

答案 4 :(得分:0)

我认为你不能在那里设置那个选项。您必须使用jQuery.ajax()和相应的参数(基本上getJSON只是将该调用包装到一个更简单的API中)。

答案 5 :(得分: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);
})

答案 6 :(得分:0)

如果您只需要await以避免嵌套代码:

let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
    json = data;
    done();
}));