在调用$.getJSON()
时,是否可以设置async: false
,以使调用阻塞而不是异步执行?
在调用$.getJSON()
时,是否可以设置async: false
,以使调用阻塞而不是异步执行?
你需要使用$.ajax()
同步调用它,像这样:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
使用$.getJSON()
,可以进行如下匹配:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
选项来将其转换为post - 尽管您不想使用 async: false
,除非您真的需要它-它会锁定UI。 - Nick Craver两个答案都是错误的。 你可以。你需要调用
$.ajaxSetup({
async: false
});
在你的json ajax调用之前设置,如果页面中有其他ajax使用而且你希望它们异步执行,则可以在调用返回后将其设置为true。
$.ajax
(以及随后的简写包装器,即$.getJSON
、$.get
等)的调用都是同步的。此外,文档甚至建议不要使用它:“描述:为未来的Ajax请求设置默认值。不建议使用它。” - Carrie Kendall我认为你们两个都是正确的。后一个答案可以正常工作,但它就像设置全局选项一样,因此您必须执行以下操作:
$.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));
它能够正常工作。然后我进行了更改。
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));
await
来避免嵌套代码:let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
json = data;
done();
}));
自己动手,举个例子。
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);
})