【问题标题】:jQuery getJSON won't work on cross domainjQuery getJSON 不能在跨域上工作
【发布时间】:2011-09-27 07:45:14
【问题描述】:

我正在尝试使用谷歌地图的 REST api 将输入的地址转换为坐标。为此,我使用 jQuery 的 getJSON 函数,因为它使用原生 JSONP 调用。

虽然它不起作用,但它只是没有成功,所以永远不会调用警报。

$("#makeCords").click(function(){
    straat = $('#straat').val();
    stad = $('#Stad').val();
    land = $('#Country').val();
    if(straat == "" || stad == "" || land == ""){
        alert("Onvoldoende gegevens! Vul straat, stad en land aan voor het gebruik van de ´bereken coordinaten´ functie.");
    }else{
        $.getJSON("http://maps.google.com/maps/api/geocode/json?callback=?",
        {
            adress: straat +", " + stad +", " + land,
            sensor: "false"
        },
          function(data) {
              alert(data);
          });
    }
});

【问题讨论】:

  • 如果您使用 URL http://maps.google.com/maps/api/geocode/json 会发生什么?
  • aaddress 确实是一种类型。但是,谷歌也会以 json 格式响应错误。所以警报仍然应该被执行。不是。

标签: javascript jquery google-maps jsonp getjson


【解决方案1】:

Google Maps Geocoding API 不支持 JSON-P;它将忽略您的callback 参数,因此跨域 JSON-P 将不起作用。

您应该改用官方 Google Maps Javascript 库。该库在内部确实使用 JSON-P 来传递信息(因为它几乎是进行跨域请求的唯一方法),但该 URL 仅供官方库使用。

【讨论】:

  • 我刚刚发现,使用 Chrome Javascript 控制台,接收到 JSON 数据但出现以下错误:Uncaught SyntaxError: Unexpected token : 这是否意味着它确实有效但不知何故错误的来源在其他地方或我还是应该只使用 Google 地图 javascript 库吗?
  • 无论如何你都应该使用提供的 JS 库。
  • 不确定,但 getJSON 可能期待像 jQuery15204934664060250754_1309622592360({/*json data*/}) 这样的东西,而不是得到 {/*json data*/}
  • @Salman 这就是我的意思,URL 不支持 JSON-P,因为它忽略了 callback 中指定的函数名称。
【解决方案2】:

这不是 javascript(在本例中为 jquery)永远不会在其自己的域之外获取或发布数据的一种安全性吗(至少据我所知,javascript 不允许 post 或 @987654322 @跨域)?您可以使用本地 php 脚本通过 curl 从谷歌服务器收集 json 信息,并将您的 get-query 发送到此本地脚本。我会尝试这种解决方法...

另一种方法是使用 google maps api for javascript。您可以使用该 api 中的地理编码函数来检索给定地址的纬度和经度。因此,您无需进行任何获取或发布...

【讨论】:

  • 不是 JSONP 实际上是向其他服务器发出请求的方式吗?我不能使用 php curl,因为我的客户的托管服务提供商不允许它:(.
  • 当您使用 getJSON 和 callback= 时,请求会变成一个跨域工作的 JSONP 请求。这应该是评论,而不是答案 -1
  • 正如我已经说过的。我很确定这是一个安全问题。 Javascript 不允许跨域获取或发布。由于您的提供商拒绝使用 curl,您仍然可以使用 google maps api...
  • 你错了Marco,你可以使用JSONP进行跨域请求。使用 jQuery,您只需要设置 dataType: "jsonp" 就可以了。
【解决方案3】:

试试jquery jsonp:

$.ajax({
   type: "GET",
   url: "http://url",
   dataType: "jsonp" ,
   success: function (data) {

   }
});

【讨论】:

  • 还是没有进入成功函数。
【解决方案4】:

尝试将 &format=json 添加到您的 get jason url 并更改 &callback=?到 &jsoncallback=?

【讨论】:

  • 现在 URI 没问题,google 正在返回漂亮而干净的 json,但我知道这是因为我将 URI 粘贴到了浏览器中。 jQuery 的 ajax 和 getJSON 函数都不会执行成功函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-17
  • 2013-01-11
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
相关资源
最近更新 更多