【问题标题】:Google Places API jQuery.ajax() request fails with working URLGoogle Places API jQuery.ajax() 请求失败,URL 有效
【发布时间】:2011-08-16 17:46:32
【问题描述】:

如果我将以下 URL 粘贴到浏览器选项卡中:

https://maps.googleapis.com/maps/api/place/search/json?location=51.5237587%2C-0.1583642&radius=500&types=bar&key=MY_KEY_HERE&sensor=false

...我从 Google Places API 获得了预期的 JSON 响应(MY_KEY_HERE 当然被实际密钥替换,这里和下面的 .ajax() 中)。然而,当使用这个 jQuery.ajax() 构造时:

$.ajax({
     type: 'GET',
     url: "https://maps.googleapis.com/maps/api/place/search/json",
     data: {"location" : latlng, "radius" : 500, "types" : "bar", "key" : "MY_KEY_HERE", "sensor" : "false",},
     dataType: "json",
     success: function(data)
     {
       var pubResults = data; 
     },
     error: function(data)
     {
       alert(JSON.stringify(data));
     },
     complete: function(data)
     {
       initialize($.oneapi.latitude, $.oneapi.longitude, pubResults);
     }
   }); 

...然后 success 块没有到达,而是 error 块输出:

{"readyState":0,"responseText":"","status":0,"statusText":"error"}

在 Firefox 5.01 中进行测试。 Web 控制台确认 .ajax() 正在获取此问题顶部提到的 URL。任何想法为什么对该 URL 的 jQuery 调用会导致错误,但粘贴到浏览器选项卡中的相同 URL 会导致预期的 JSON?

非常感谢您的宝贵时间!

【问题讨论】:

    标签: jquery google-maps-api-3


    【解决方案1】:

    这是一个跨域请求。默认情况下,浏览器会阻止来自跨域站点的响应。您需要使用 jsonp 作为数据类型。只需谷歌相同,您就可以看到如何使用 jquery API 完成它。堆栈溢出也有这些问题。

    在同源策略下,从 server1.example.com 提供的网页无法正常连接到 server1.example.com 以外的服务器或与之通信。 HTML 元素是一个例外。利用元素的开放策略,一些页面使用它们来检索对来自其他来源的动态生成的 JSON 格式数据进行操作的 Javascript 代码。这种使用模式称为 JSONP。

    【讨论】:

    • 非常感谢,我应该已经发现了!请注意,Google Places 不兼容 JSONP,因此我改用了 Google Places JavaScript API。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2023-03-10
    • 2013-06-25
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    相关资源
    最近更新 更多