是否可以async: false
在调用时设置$.getJSON()
以便调用阻塞而不是异步?
问问题
128623 次
7 回答
157
您需要$.ajax()
同步调用它,如下所示:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
这将与当前使用的匹配,$.getJSON()
如下所示:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
于 2010-05-04T13:51:03.833 回答
48
两个答案都是错误的。你可以。你需要打电话
$.ajaxSetup({
async: false
});
在您的 json ajax 调用之前。并且您可以在调用 retuns 后将其设置为 true (如果您希望它们异步,页面上还有其他 ajax 用法)
于 2011-07-13T09:29:25.177 回答
20
我觉得你们俩都是对的。后面的答案工作正常,但它就像设置一个全局选项,所以你必须执行以下操作:
$.ajaxSetup({
async: false
});
//ajax call here
$.ajaxSetup({
async: true
});
于 2013-05-21T16:43:27.597 回答
11
就我而言,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));
于 2016-03-28T07:22:09.020 回答
1
If you just need to await
to avoid nesting code:
let json;
await new Promise(done => $.getJSON('https://***', async function (data) {
json = data;
done();
}));
于 2018-08-20T23:38:38.527 回答
0
我认为您不能在那里设置该选项。您必须使用带有适当参数的jQuery.ajax()(基本上 getJSON 也只是将该调用包装到更简单的 API 中)。
于 2010-05-04T13:03:15.280 回答
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);
})
于 2015-12-04T08:37:06.453 回答