Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery getJSON不支持异步:false_Jquery_Synchronous - Fatal编程技术网

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,但异步工作也一样好。你唯一可以做的就是坚持它是同步的,当你在等待的时候,整个系统都会被锁起来,大多数人会认为这是一个缺点,而不是一个好处。