Jquery getJSON不支持异步:false
我有下面的代码,它应该返回调用的结果。我需要同步地这样做,这样我就知道一切都很好,但它似乎不起作用。我做错了什么Jquery getJSON不支持异步:false,jquery,synchronous,Jquery,Synchronous,我有下面的代码,它应该返回调用的结果。我需要同步地这样做,这样我就知道一切都很好,但它似乎不起作用。我做错了什么 /* jQuery library: * http://code.jquery.com/jquery-1.9.1.min.js */ function getJSON(url){ var result; $.getJSON(url, { async: false, success: function(data) { result = data;
/* jQuery library:
* http://code.jquery.com/jquery-1.9.1.min.js
*/
function getJSON(url){
var result;
$.getJSON(url, { async: false, success: function(data) {
result = data;
alert(data); // **Edit**: also undefined
}});
alert(result); // undefined
return result;
}
getJSON不支持异步:false
具有无async:false
选项。你得用这个
根据文档,getJSON
相当于:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
…您可以轻松地向其中添加一个async:false
选项(现在,请预先警告jQuery将放弃对该选项的支持)
我需要同步地这样做,以便我知道一切都是好的
你不需要做任何同步的事情来“知道一切都是好的”,异步处理结果(无论是“好的”还是错误)是完全可能的(也是正常的)
在对你的问题的评论中,你写道:
jsonp?这是我正在使用的代码 与不同(除非URL中有
callback=?
或类似内容,否则getJSON
不会执行JSON-p),并且JSON-p本质上是异步的。与通过XMLHttpRequest
进行真正的ajax调用不同,不可能使JSON-P同步。$.getJSON()
不支持async:false
,甚至无法将该选项传递给$.getJSON()
(请查看中的参数)
在内部,$.getJSON()
使用$.ajax()
,如果查看for$.ajax()
,它会告诉您,如果ajax请求是跨域的,并且是针对JSONP的,那么它不支持异步:false
原因是跨域JSON请求是用JSONP实现的,根据定义,JSONP是一个动态插入的
标记,它只能是异步的。它不能是同步的
如果请求是跨域的,则需要将其编码为异步的;如果请求不是跨域的,则需要直接使用$.ajax()
。是$.ajax
的缩写
这是一个速记Ajax函数,相当于:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
$.ajax({
数据类型:“json”,
url:url,
数据:数据,
成功:成功
});
您会注意到,没有用于传递异步选项的选项。您试图添加的async:false
参数实际上是将随ajax请求发送到url
的数据
尝试这样做:
$.ajax({
dataType: "json",
url: url,
async: false,
data: data,
success: success
});
还有,你的声明
我需要同步地这样做,以便我知道一切都是好的
这是不正确的。您可以通过异步回调“知道一切都好”。如果您这样编写示例代码,那么您的示例代码将完全完成上面尝试执行的操作:
function getJSON(url){
var result;
$.getJSON(url, function(data) {
alert(data);
// do other stuff with data, call other methods etc. etc.
});
}
您甚至可以单独定义回调函数并将其传递给$.getJSON
,如下所示:
function jsonCallback(data) {
alert(data);
// do other stuff with data, call other methods etc. etc.
}
function getJSON(url){
var result;
$.getJSON(url, jsonCallback);
}
我只是在getJSON之前插入以下代码:
$.ajaxSetup({
async: false
});
原始答案:jsonp?这就是我正在使用的代码。您是否介意告诉我们您的url是什么(或类似于什么)?getJSON的数据参数用于向服务器发送数据,而不是设置参数。即使这样,你还是用错了。为什么要使其
异步:false
?这是一个糟糕的想法,除非你是在一个网络工作者。这可能是重复不太正确$.getJSON()
在内部使用$.ajax()
。@jfriend00:哪部分不正确getJSON
没有async:false
选项。如果您想使用该选项,您必须直接调用ajax
。错误的部分是,您也无法使用$.ajax()
解决问题。您也不能使用$.ajax()
执行跨域JSON请求。因此,您建议使用$.ajax()
是不对的。@jfriend00:我从来没有说过您可以这样做(尽管您在这一点上实际上是错误的:您可以通过;而不是通过JSON-P进行跨域同步请求)。我说过可以直接使用ajax
设置async:false
。我没有说任何关于跨域请求的事情。如果您能在给我带来困难之前再通读一遍,我将不胜感激。:-)如果这是你的否决票,恕我直言,那真是太令人惊讶了。”…如果你这样写的话,上面就是:“但是什么时候结果会被设置并返回?你不需要设置或返回它来使用它。”。不管你想用它做什么,只要在回调中做就行了。如果要缓存或保留它,可以通过执行window.lastJsonResult=data代码>,但异步工作也一样好。你唯一可以做的就是坚持它是同步的,当你在等待的时候,整个系统都会被锁起来,大多数人会认为这是一个缺点,而不是一个好处。