getJSON不尊重异步:false

我在下面有这个代码,它应该返回调用的结果。 我需要同步这样做,以便我知道一切都很好,但它似乎不起作用。 我究竟做错了什么?

/* 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

getJSON没有async: false选项。 你必须使用ajax

根据文档, getJSON相当于:

 $.ajax({ dataType: "json", url: url, data: data, success: success }); 

…你可以轻松地添加一个async: false选项(现在,预先警告jQuery将放弃对它的支持)。

我需要同步这样做才能让我知道一切都很好

你不需要同步做任何事情来“知道一切都很好”,完全可能(和正常)异步处理结果(无论是“好”还是错误)。


在您对问题的评论中,您写道:

JSONP? 这是我正在使用的代码。

JSON-P与JSON不同 (并且getJSON不执行JSON-P,除非您在URL中具有callback=?或类似内容),并且JSON-P 本质上是异步的。 与通过XMLHttpRequest进行的真正的ajax调用不同,不可能使JSON-P同步。

$.getJSON()不支持async: false ,甚至无法将该选项传递给$.getJSON() (查看jQuery文档中的参数)。

在内部, $.getJSON()使用$.ajax() ,如果你查看$.ajax()的doc页面 ,它会告诉你,如果ajax请求是跨域而且是JSONP,它不支持async: false

这样做的原因是使用JSONP实现了跨域JSON请求,根据定义,动态插入的标记只能是异步的。 它不能同步。

如果请求是跨域的,则需要将您的请求编码为异步,如果不是跨域,则需要直接使用$.ajax()

$.getJSON$.ajax的简写。

这是一个简写的Ajax函数,相当于:

$ .ajax({dataType:“json”,url:url,data:data,success:success});

您会注意到没有选项可以通过异步选项。 您尝试添加async: false to的参数实际上是将使用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 }); 

原始答案: 是否可以将async:false设置为$ .getJSON调用