Javascript Google Geocode返回未定义(无法计算回调函数)

时间:2015-04-16 05:33:30

标签: javascript google-maps geocode

我正在尝试存储来自Google Geocoding API的响应的纬度和经度值。现在我在加利福尼亚使用固定的位置。我的HTTP请求一直返回undefined。

我一直在四处寻找,我发现人们也遇到同样的问题,但我无法绕过制作一个似乎是解决方案的回调功能,任何人都可以向我解释如何做到这一点?我知道我的CORS请求正在运行,因为我正在使用它从我设置的Heroku服务器谈GET。

var geocode = new XMLHttpRequest();
geocode = createCORSRequest('GET', 'https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=');

geocode.onload = function() {
    var geoData = JSON.parse(geocode.responseText); // parse the JSON from geocode response
    var results = geoData["results"]; // create variable for results

    var userLong = results["geometry"]["location"]["lng"]; // parse the latitude
    var userLat = results["geometry"]["location"]["lat"]; // parse the longitude
    console.log(userLong);
    console.log(userLat);
}

createCORSRequest()

// Create the XHR object.
function createCORSRequest(method, url) {
if ("withCredentials" in xhr) {
  // XHR for Chrome/Firefox/Opera/Safari.
  xhr.open(method, url, false);
} else if (typeof XDomainRequest != "undefined") {
  // XDomainRequest for IE.
  xhr = new XDomainRequest();
  xhr.open(method, url);
} else {
  // CORS not supported.
  xhr = null;
}
return xhr;
}

2 个答案:

答案 0 :(得分:0)

假设createCORSRequest返回一个xhrxhr之类的对象(这似乎是来自HTML5 Rocks网站等地方的createCORSRequest的典型样板),您需要包含{{} 1}}在代码的末尾。否则,请求永远不会触发,因此永远不会调用geocode.send();处理程序。

答案 1 :(得分:0)

看起来您正在关注HTML5Rocks网站 Using CORS 文章。

创建xhr请求后。您必须调用send()方法来触发ajax调用。

var geocode = new XMLHttpRequest();
geocode = createCORSRequest('GET', 'https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=');

geocode.onload = function() {
    var geoData = JSON.parse(geocode.responseText); // parse the JSON from geocode response
    var results = geoData["results"]; // create variable for results

    var userLong = results["geometry"]["location"]["lng"]; // parse the latitude
    var userLat = results["geometry"]["location"]["lat"]; // parse the longitude
    console.log(userLong);
    console.log(userLat);
}

geocode.send();

除非您致电geocode.send(),否则该值将未定义,因为未触发任何请求。