无法从我的API调用中获得正确的返回值

时间:2016-12-01 19:07:08

标签: javascript json api

我正在使用http://ip-api.com/json API,我正在尝试获取一个可以容纳城市和一个人的国家的对象。 这是我的代码。

$(document).ready(function() {

var locationAPI = "http://ip-api.com/json";
var K, C, F;


var Person = {
    city: function() {
        $.getJSON(locationAPI, function(data) {
            return data.city;
        });
    },
    country: function() {
        $.getJSON(locationAPI, function(data) {
            return data.countryCode;
        });
    }
};

var x = Person.city;
console.log(x); });

这是输出:

function () {
        $.getJSON(locationAPI, function(data) {
            return data.city;
        });
    }

我希望它为ex输出一个值。 - Person.country = USA 我做错了什么?

1 个答案:

答案 0 :(得分:0)

你认为你的问题是.getJSON是一个简单的函数,但它不是,它是一个promise函数,你有两种获取数据的方法,或者像这样的回调函数:

$(document).ready(function() {

var locationAPI = "http://ip-api.com/json";
var K, C, F;
var Person;

$.getJSON(locationAPI, function(data) {
  Person = {
    city: data.city,
    country: data.country
  };

  var x = Person.city;
  console.log(x); });

});

或者您也可以做的是这样的承诺:

var theCall = $.getJSON(locationAPI);

theCall.done(function(data) {...})

您可以使用.ajax()方法并设置async:false,这将使代码等待ajax完成,然后才继续(仅在设置变量后继续)

但这不是一个好方法,因为它会阻止浏览器等待通话,而这可能需要几秒钟才能完成!

$.ajax({
  url: myUrl,
  dataType: 'json',
  async: false,
  success: function(data) {
    //stuff
    //...
  }
});

您可以从ajax的文档或此Is it possible to set async:false to $.getJSON call

中了解更多信息