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

调用$.getJSON()时,是否可以设置async: false ,以便调用块而不是asynchronous?

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

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

这将匹配目前使用$.getJSON()像这样:

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

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

 $.ajaxSetup({ async: false }); 

在你的json ajax调用之前。 你可以在callback后将其设置为true(如果你希望它们是asynchronous的话,页面上还有其他的Ajax用法)

我想你们都是对的。 后面的答案工作正常,但它像设置一个全局选项,所以你必须做到以下几点:

  $.ajaxSetup({ async: false }); //ajax call here $.ajaxSetup({ async: true }); 

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

它的作品find。 然后我改变

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

我不认为你可以在那里设置这个选项。 你将不得不使用jQuery.ajax()和适当的参数(基本上getJSON只是把这个调用包装成一个更简单的API)。

滚你自己的例如

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