Javascript 函数返回对象,但获取';未定义';

Javascript 函数返回对象,但获取';未定义';,javascript,Javascript,我是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

我是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)
显示了我想要的信息。但是,返回的值是
未定义的
,这可以从
console.log(dados)
中看出。非常感谢您的帮助。

您在
getDadoIP
中没有return语句,因此它隐式返回undefined。您需要返回promise对象,然后使用它的
。然后
方法访问最终值

 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);
     });
  }

getDadoIP
中没有return语句,因此它隐式返回undefined。您需要返回promise对象,然后使用它的
。然后
方法访问最终值

 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);
     });
  }
使用异步/等待:

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);
}
使用异步/等待:

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);
}

问自己一个问题:“哪个函数正在返回某些内容?”,然后查找
函数的所有实例。然后阅读有关异步javascript的内容:)问自己一个问题:“哪个函数正在返回某些内容?”,然后查找
函数的所有实例。然后阅读有关异步javascript的内容:)完美。非常感谢。完美的非常感谢。