我有下面这段代码,这是应该返回调用的结果。 我需要让我知道一切都很好做此同步,但它似乎并没有工作。 我究竟做错了什么?
/* 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不接受异步:假
getJSON
没有 async: false
选项。 你不得不使用ajax
为。
根据该文件, getJSON
相当于:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
......到你可以轻松地添加一个async: false
选项(现在,谅解,jQuery将下探该支撑位)。
我需要同步做,所以我知道一切都很好
你不需要做任何事情同步“知道一切都很好”,这是完全可能的(正常)至(无论是“好”或错误)异步处理结果。
在对你的问题的评论,你写的:
JSONP? 这是我使用的代码。
JSON-P是不一样的JSON (和getJSON
没有做JSON-P,除非你有callback=?
或URL类似),和JSON-P 本质上是异步的。 不同于通过一个真正的Ajax调用XMLHttpRequest
,它不可能让JSON-P同步。
$.getJSON()
不支持async: false
,也没有办法,甚至传递选项$.getJSON()
看看在参数jQuery的文档 )。
在内部, $.getJSON()
使用$.ajax()
如果你看一下文档页面的$.ajax()
它会告诉你在那里,如果AJAX请求是跨域,它是为JSONP,它不支持async: false
。
这样做的原因是,跨域JSON请求与JSONP实现,其通过定义一个动态插入<script>
标签只能是异步的。 它不可能是同步的。
您将需要编写您的要求是异步的,如果它是跨域或使用$.ajax()
直接,如果它不是跨域。
$.getJSON
是速记$.ajax
。
这是一个简写的Ajax功能,这相当于:
$阿贾克斯({数据类型: “JSON”,网址:网址,数据:数据成功:成功});
你会注意到是通过异步选项的选项。 您尝试添加的参数async: false
实际上是将被发送到数据url
与Ajax请求。
尽量不要做这样的:
$.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
});
原来的答复: 是否有可能设置异步:假以.getJSON $通话