从URL(地理编码API)初始化JSON对象的最简单(或至少是一种功能)方法

时间:2012-04-29 14:23:30

标签: json google-maps google-geocoding-api

我试图在我的javascript代码中对Geocoding API进行地理编码。我得到了网址定义    var url = "http://http://maps.googleapis.com/maps/api/geocode/json?address=New York, Manhattan&sensor=false" 我需要从中检索JSON对象。我使用的第一种方法是根据维基百科使用XmlHttpRequest这样的

var my_JSON_object = {};
var http_request = new XMLHttpRequest();
http_request.open("GET", url, true);
http_request.onreadystatechange = function () {
  var done = 4, ok = 200;
  if (http_request.readyState == done && http_request.status == ok) {
       my_JSON_object = JSON.parse(http_request.responseText);
  }
};

我运行代码并在触发open()函数后在调试器中获得此类输出:

http_request: XMLHttpRequest
onabort: null
onerror: null
onload: null
onloadend: null
onloadstart: null
onprogress: null
onreadystatechange: function () {
readyState: 1
response: ""
responseText: ""
responseType: ""
responseXML: null
status: [Exception: DOMException]
statusText: [Exception: DOMException]
upload: XMLHttpRequestUpload
withCredentials: false
__proto__: XMLHttpRequest

这意味着没有什么真正有用的。 我的第二种方法是由于json.org,我试图用JSONRequest进行调用

var requestNumber = JSONRequest.get(
url, 
function (requestNumber, value, exception) {
    if (value) {
        document.write(value);
    } else {
        document.write(exception);
    }
}

调试器告诉我JSONRequest没有定义!由于json.org的原生JS对象所以问题是什么? 请注意,我在附近的脚本中使用谷歌正确获得的API密钥。

解释为什么我的解决方案失败,并且非常感谢任何有关如何遵守此任务的建议!

1 个答案:

答案 0 :(得分:0)

我读过像cross domain XHRApache/HTTP proxies这样的黑客,但结论是Javascript API V3 geocoding是你唯一的现实选择。此评论(from here)虽然不具有权威性,但表明此类JSON请求不再起作用:

  

有人会合理地期望谷歌地图api允许跨域   访问,直到最近才这样做。现在它不再允许它了;   我猜他们声称安全原因,但我也猜测真正的原因   是要求你只使用他们的代码来获得他们的服务。所以   从客户端通过javascript获取数据的唯一方法是使用   Google的javascript api,无论如何都给你几乎相同   直接调用api url的灵活性。

This question提供了最有用的信息。