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

Jquery 是否可以将async:false设置为$.getJSON调用,jquery,asynchronous,getjson,Jquery,Asynchronous,Getjson,调用$.getJSON()时是否可以设置async:false,以便调用阻塞而不是异步?我认为您不能在那里设置该选项。您必须与适当的参数一起使用(基本上getJSON也只是将该调用包装到一个更简单的API中)。您需要同步使用该调用,如下所示: $.ajax({ url: myUrl, dataType: 'json', async: false, data: myData, success: function(data) { //stuff //... }

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

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

您需要同步使用该调用,如下所示:

$.ajax({
  url: myUrl,
  dataType: 'json',
  async: false,
  data: myData,
  success: function(data) {
    //stuff
    //...
  }
});
$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});
这将与当前使用的类似:

$.ajax({
  url: myUrl,
  dataType: 'json',
  async: false,
  data: myData,
  success: function(data) {
    //stuff
    //...
  }
});
$.getJSON(myUrl, myData, function(data) { 
  //stuff
  //...
});
两个答案都错了。 你可以。你需要打电话

$.ajaxSetup({
异步:false
});

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

我想你们都是对的。后面的答案很好,但它类似于设置一个全局选项,因此您必须执行以下操作:

    $.ajaxSetup({
        async: false
    });

    //ajax call here

    $.ajaxSetup({
        async: true
    });
你自己滚吧

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

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

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

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

我只是重读了那部分文件。这里是关于ajaxSetup的部分:这里有一些选项:它清楚地说:“异步默认:默认情况下为true,所有请求都是异步发送的(即,默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和数据类型:“jsonp”请求不支持同步操作。”JSONP不是JSON,所以我仍然认为我从一开始就是对的。当我有时间的时候,我会写一个例子。这是一个迟来的评论,但是。。。哪两个答案都错了?我认为@Nick Craver的回答是可以接受的,并且不会“弄乱”全局AJAX设置(如果其他请求同时启动),但这将适用于您在页面中发出的所有AJAX请求。因此,我将投反对票,因为我不推荐这样做。这是一个非常低质量的答案——1:使事情同步可能代价高昂。除非您的项目每次都绝对需要,否则您绝对应该在每次通话的基础上这样做。您的答案建议您全局配置对
$.ajax
(以及后续的速记包装器,即
$.getJSON
$.get
,等等)的所有调用为同步。此外,甚至还建议不要使用此选项:“Description:为将来的Ajax请求设置默认值。不建议使用此选项。”我发现便利方法$.getJSON()几乎从来没有用过,最终总是使用$.Ajax()。我可以将其用于POST调用吗?@hitesh yes,您还需要添加一个
type:'POST'
选项,将其转换为POST-尽管您不想使用
async:false
,除非您确实需要-它会锁定UI。在这种情况下,“myData”应该是什么?当我删除数据时:我的数据完全有效。。对ajax调用来说相当陌生!刚刚遇到了以下新问题:“workers之外的同步XMLHttpRequest正在从web平台中删除,因为它会对最终用户的体验产生有害影响(这是一个耗时多年的漫长过程)当entry settings对象的全局对象是窗口对象时,开发人员不得为async参数传递false。强烈建议用户代理在开发人员工具中警告此类用法,并可能在发生InvalidAccessError异常时尝试抛出InvalidAccessError异常。“只需将代码放入回调中…”。。。。这是不推荐使用的一个原因-它是一个坏的idea@Milney-非常奇怪……官方称,它已被弃用;事实并非如此。如果它真的被弃用,那么在jQuery3中,进行syncAjax调用或$AJAX.setup开关的可能性就会降低。事实上,sync调用有时非常有用,例如在使用JSON数据初始化globals时,当您有其他依赖于第一批的globals时。(在某些情况下,将整个初始化过程打包到回调函数中可能会非常棘手。)我想我们可以回答这个问题。