虽然这不是推荐的做事方式,但执行同步 Ajax 调用应该可以解决您认为的问题。
ip = null;
$.ajax({
url: 'http://jsonip.appspot.com/',
async: false,
dataType: 'json',
contentType: 'application/j-son;charset=UTF-8',
success: function (data) {
ip = data.ip
alert(ip);
}
});
alert(ip);
再次强调,不推荐这样做,因为执行同步 Ajax(代表异步Javascript 和 Xml)是不规则的,并且有点违背 Ajax 的目的。但是,如果您绝对需要您的 Web 应用程序等待返回该数据,那么这样做应该可行。我会做一个小提琴,但 URL 不允许来自 jsfiddle 的请求。
如果您可以对您的应用程序进行编码,使其不依赖于继续执行的响应,那就更好了。例如,如果您在 Ajax 响应成功返回后调用了一个函数,如下所示:
ip = null;
$.ajax({
url: 'http://jsonip.appspot.com/',
dataType: 'json',
contentType: 'application/j-son;charset=UTF-8',
success: function (data) {
ip = data.ip
alert(ip);
gotAjaxResponse()
}
});
function gotAjaxResponse() {
alert(ip);
}
请注意,我们仍在使用全局变量ip
(这是另一种不好的做法,但我将把该演讲留到另一天 =),至少在继续执行依赖于拥有该数据的代码之前,您正在等待响应。
另外,请注意,第二个示例仍然使用 generic $.ajax()
,没有async: false
,您可以使用该$.getJSON()
方法。