getJSON不尊重异步:false

Arl*_*ler 2 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;
        alert(data); // **Edit**: also undefined
    }});
    alert(result); // undefined
    return result;
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 11

getJSON不尊重异步:false

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

根据文档,getJSON相当于:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});
Run Code Online (Sandbox Code Playgroud)

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

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

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


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

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

JSON-PJSON不同(getJSON除非您callback=?在URL中有或类似,否则不执行JSON-P ),并且JSON-P 本质上是异步的.与真正的ajax调用via不同XMLHttpRequest,不可能使JSON-P同步.

  • @jfriend00:我从来没有说过你可以(虽然你实际上是不正确的:你可以*通过[CORS](http://www.w3.org/TR/access-control/)进行跨域同步请求;只是不通过JSON-P).我说你可以直接使用`ajax`设置`async:false`.我没有说过跨域请求.如果你在给我一个艰难的时间之前再次阅读,我会很感激.:-)如果这是你的誓言,尊重,我不得不说,这是非常令人惊讶的. (3认同)