我是JS的新手,想要创建一个接收给定IP地址并返回一些相关信息的函数
function getDadoIP(IP){
var APIKey = 'key';
var format = 'json';
var url = 'http://api.ipinfodb.com/v3/ip-city/?key=' + APIKey + '&ip=' + IP + '&format=' + format + '&callback=?';
var resposta = $.getJSON(url);
resposta.then(function (res) {
var info = '';
for (var chave in res) {
info += res[chave] + ',';
}
console.log(info);
var dado = info.split(/,/);
return {
"codigoStatus": dado[0],
"codigoMensagem": dado[1],
"ipPesquisado": dado[2],
"codigoPais": dado[3],
"pais": dado[4],
"regiao": dado[5],
"cidade": dado[6],
"codigoZip": dado[7],
"latitude": dado[8],
"longitude": dado[9],
"fusoHorario": dado[10]
};
});
}
function setup() {
var dados = getDadoIP('IP-goes-here');
console.log(dados);
}
我能够在函数中得到我想要的信息,因为console.log(info)
显示了我的预期。但是,返回的值为undenfined
,由console.log(dados)
证明。非常感谢任何帮助。
答案 0 :(得分:2)
getDadoIP
内部没有return语句,因此隐式返回undefined。您需要返回promise对象,然后使用它的.then
方法来访问最终值。
function getDadoIP(IP){
var APIKey = 'key';
var format = 'json';
var url = 'http://api.ipinfodb.com/v3/ip-city/?key=' + APIKey + '&ip=' + IP + '&format=' + format + '&callback=?';
var resposta = $.getJSON(url);
//** Added return statement
return resposta.then(function (res) {
var info = '';
for (var chave in res) {
info += res[chave] + ',';
}
console.log(info);
var dado = info.split(/,/);
return {
"codigoStatus": dado[0],
"codigoMensagem": dado[1],
"ipPesquisado": dado[2],
"codigoPais": dado[3],
"pais": dado[4],
"regiao": dado[5],
"cidade": dado[6],
"codigoZip": dado[7],
"latitude": dado[8],
"longitude": dado[9],
"fusoHorario": dado[10]
};
});
}
function setup() {
//** added .then
getDadoIP('IP-goes-here')
.then(function (dados) {
console.log(dados);
});
}
答案 1 :(得分:0)
使用async / await:
async function getDadoIP(IP){
var APIKey = 'key';
var format = 'json';
var url = 'http://api.ipinfodb.com/v3/ip-city/?key=' + APIKey + '&ip=' + IP + '&format=' + format + '&callback=?';
var res = await $.getJSON(url);
var info = '';
for (var chave in res) {
info += res[chave] + ',';
}
console.log(info);
var dado = info.split(/,/);
return {
"codigoStatus": dado[0],
"codigoMensagem": dado[1],
"ipPesquisado": dado[2],
"codigoPais": dado[3],
"pais": dado[4],
"regiao": dado[5],
"cidade": dado[6],
"codigoZip": dado[7],
"latitude": dado[8],
"longitude": dado[9],
"fusoHorario": dado[10]
};
}
async function setup() {
var dados = await getDadoIP('IP-goes-here');
console.log(dados);
}