Jquery $.ajax异步:错误故障

Jquery $.ajax异步:错误故障,jquery,ajax,asynchronous,Jquery,Ajax,Asynchronous,我知道这看起来像是一个重复的问题,相信我,我读了所有的问题,并尝试了所有的方法,但我无法让它起作用(JQuery 1.11.0): 无论我做什么,alert(ccode)都会在alert(data.country\u code)之前触发,因此我的返回值未定义。不幸的是,我的知识有限,我看不出如何在异步模式下做我需要的事情。我只需要返回数据。国家代码首先,因为您使用的是jsonp,所以您无法执行任何操作:( 从1.8版开始,不再支持async:false 您需要等待successhandler获得

我知道这看起来像是一个重复的问题,相信我,我读了所有的问题,并尝试了所有的方法,但我无法让它起作用(JQuery 1.11.0):


无论我做什么,
alert(ccode)
都会在
alert(data.country\u code)
之前触发,因此我的返回值未定义。不幸的是,我的知识有限,我看不出如何在异步模式下做我需要的事情。我只需要返回
数据。国家代码

首先,因为您使用的是jsonp,所以您无法执行任何操作:(

从1.8版开始,不再支持
async:false


您需要等待
success
handler获得您想要的任何值。

首先,由于您使用的是jsonp,因此您无法执行任何操作:(

从1.8版开始,不再支持
async:false


您需要等待
成功
处理程序才能获得所需的任何值。

无法发送同步jsonp请求


JSONP请求是通过将
标记附加到
标记来完成的。由于无法在DOM就绪后强制同步加载
标记,因此无法强制jQuery JSONP请求同步。

无法发送同步JSONP请求


JSONP请求是通过将
标记附加到
标记来完成的。因为在DOM准备好后不可能强制同步加载
标记,所以不可能强制jQuery JSONP请求同步。

简单的答案是,永远不要使用
异步:false
。不要等待异步操作要完成这些操作,请使用它们提供的响应处理程序进行响应。简单的答案是,永远不要使用
async:false
。不要等待异步操作完成,请使用它们提供的响应处理程序进行响应。
async:false
在1.11和2.x中受支持,并且尚未被弃用。即使他降级了对于1.5,他将无法发送同步jsonp请求,因为它是jsonp,而不是因为库不支持它。这根本不可能,因为jsonp请求是如何工作的。1.8中不推荐使用的是.done().fail()和.always()关于同步请求。我真的没有看到
jsonp
@KevinB,我想你会争辩说,我偷了你的答案。不,我更关心的是可用的答案是正确的。我的答案是常识
async:false
在1.11和2.x中受支持,并且还没有被弃用。即使他降级到1.5,他也无法使用NDA同步jsonp请求是因为它是jsonp,而不是因为库不支持它。这根本不可能,因为jsonp请求是如何工作的。1.8中不推荐使用的是.done().fail()和.always()关于同步请求。我真的没有看到
jsonp
@KevinB,我想你会争辩说,我偷了你的答案。不,我更关心的是可用的答案是否正确。我的答案是公共知识嗯…如果你用一个文档创建了一个iframe,并在它被解析之前添加了脚本标记,它会加载该脚本synchrono吗uly?仍然无法解决OP的问题,但从技术上讲,它会导致同步jsonp请求发生。嗯……如果您使用文档创建了一个iframe,并在解析之前将脚本标记添加到它,它会同步加载该脚本吗?仍然无法解决OP的问题,但从技术上讲,它会导致同步jsonp请求不可能发生。
function gip(){
var ccode;
$.ajax({
    url: 'http://freegeoip.net/json/?callback=?',
    dataType: 'json',
    crossDomain: true,
    async: false,
    success: function (data) {
        alert(data.country_code);
        ccode = data.country_code;
        },
    error: function(error) {
        alert(error)
        return '';
        }
    });
alert(ccode);
return ccode;
}