var city;
function getCity(){
$.getJSON("http://ip-api.com/json/?callback=?", function(data) {
city= data.city;
alert(city);
});
}
getCity();
alert(city);
我警告同一个城市变量两次,一个在函数getcity()内,另一个在最后。但他们都给出了不同的价值观。函数内部给出了当前的城市但是外面的函数给出了undefined。我希望两者都能获得当前的城市。
答案 0 :(得分:4)
AJAX是异步的
这意味着getCity
将稍后检索数据,但您的脚本不会停止,并将触发alert(city)
当前没有值(未定义)
使用如下回调:
function getCity( callback ){
$.getJSON("http://ip-api.com/json/?callback=?", function(data) {
var city= data.city;
alert(city);
callback( city );
});
}
getCity(function( city ){
alert(city);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:1)
那是因为$.getJSON
是异步的;它将在后台获取指定的URL,然后在完成后运行您传递给第二个参数的函数。同时,您可以在获取所请求的数据时继续执行其他操作。
这意味着您的控制流程如下所示:
undefined
。getCity
。
getCity
将在后台触发异步请求。getCity
然后退出。city
的内容 - 仍然是'undefined。getJSON
将完成,并将调用指定的函数。
city
并将其打印出来。确保在city
执行后设置getCity
并不是一个很好的方法 - 您应该尝试移动需要在回调中设置city
的逻辑。