使用Javascript使用Json检索数据

时间:2016-05-22 12:26:41

标签: javascript json api

      var city;

      function getCity(){ 
         $.getJSON("http://ip-api.com/json/?callback=?", function(data) {
            city= data.city;
            alert(city);
         });
       }

       getCity();
       alert(city);

我警告同一个城市变量两次,一个在函数getcity()内,另一个在最后。但他们都给出了不同的价值观。函数内部给出了当前的城市但是外面的函数给出了undefined。我希望两者都能获得当前的城市。

2 个答案:

答案 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的逻辑。