【问题标题】:results[0].formatted_address return undefined or nullresults[0].formatted_address 返回 undefined 或 null
【发布时间】:2015-12-28 21:31:51
【问题描述】:

我正在尝试通过一个函数来获取地址,我只需要提供 latLong 但我遇到了一个真正的问题来保存 de 值以返回或简单地返回它

function getadress(latLong){
  var adress ="";
  geocoder.geocode( {'latLng': latLng},
  function(results, status) {
    if(status == google.maps.GeocoderStatus.OK) {
      if(results[0]) {
        adress = results[0].formatted_address; // wrong way result empty
        alert(results[0].formatted_address); // result perfect adress
        return results[0].formatted_address // result undefiened
      }
      else {
        adress = "No results";
      }
    }
    else {
      adress = status;
    }
  });
  return adress;
}

【问题讨论】:

  • 地理编码器是异步的。您不能从异步回调虚构中返回任何内容。您需要在回调函数中使用响应,无论何时/何时可用。
  • 我该如何上班
  • @geocodezip 这正是 OP 所做的。他们在回调function(result,status) 中利用地理编码的结果。 @Alberto 你的变量有错字latLong --> latLng
  • return results[0].formatted_address 在回调函数内部。
  • 是的,所以?这不就是应该的吗?编辑:好的,我明白你的意思。确实,您不能从回调函数中返回任何内容。

标签: javascript google-maps geocode


【解决方案1】:

Javascript是异步的,这样写的话,返回的地址永远是空的。这是您当前代码的执行顺序:

function getadress(latLng){

  var adress =""; // (1) Sets address as empty.

  geocoder.geocode( {'latLng': latLng}, // (2) Launches the geocoding request.
      function(results, status) { // (4) later, when the result gets back, populates the address.
          adress = results[0].formatted_address;
      });
  });

  return adress; // (3) Immediately returns an empty address.
}

你应该如何架构它:

function getadress(latLng){

  var adress =""; // (1) Sets address as empty.

  geocoder.geocode( {'latLng': latLng}, // (2) Launches the geocoding request.
      function(results, status) { // (3) later, when the result gets back, populates the address.
          adress = results[0].formatted_address;
          nextStep(address);
      });
  });
}

function nextStep(address){ // (4) should log the address
   console.log(address);
}

【讨论】:

  • 完美完成 ;) tk 这么多 -jeremy :D
  • 很高兴我能帮上忙,请接受答案,这样我可以得到一些代表 :)
  • 这也可以工作 'nextStep(results[0].formatted_address);'
猜你喜欢
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2013-11-23
  • 2015-08-12
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多