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时。(在某些情况下,将整个初始化过程打包到回调函数中可能会非常棘手。)我想我们可以回答这个问题。