调用async: false
时是否可以设置$.getJSON()
以便调用阻塞而不是异步?
答案 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();
}));