我正在使用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 我做错了什么?
答案 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
中了解更多信息