使用jQuery和Yahoo的Geolocation API的“无效标签”parsererror

时间:2011-07-23 22:49:23

标签: jquery ajax json jsonp yahoo

我正在使用jQuery访问Yahoo的Geolocation API。即使我能够从他们的服务器成功检索数据,我也无法让jQuery成功解析数据。我已经尝试了$ .ajax()和$ .getJSON,每个都返回相同的失败:parsererror和“invalid label”。

通过我对互联网的挖掘,我发现“无效标签”很可能是JSON没有被括在括号中的结果,但我无法弄清楚如何将数据包装起来解析。我甚至不相信这是问题所在。

这是我的代码:

  $(document).ready(function() {
    var url  = "http://where.yahooapis.com/geocode?q=39.0334171,-94.8320452&gflags=R&flags=JT&appid=supersecretappid&callback=?";

    $.getJSON(url, function() { alert("success"); })
      .error(function(data) { alert(JSON.stringify(data)); });

  });

仅使用$ .ajax的备用版本如下:

$.ajax({
  url: url,
  data: {},
  dataType: "jsonp",
  contentType: "text/plain",
  success: function(json) {
    alert("success");
  },
  error: function(x,y,z) {
    alert(JSON.stringify(x));
  }
});

提前非常感谢。

1 个答案:

答案 0 :(得分:1)

您尝试访问的API不支持JSONP。因此,由于same origin policy限制,您无法将其与javascript一起使用。尝试在浏览器中粘贴以下网址:

http://where.yahooapis.com/geocode?q=39.0334171,-94.8320452&gflags=R&flags=JT&appid=supersecretappid&callback=foo

查看完全忽略callback参数的方式?服务器返回纯JSON,而不是JSONP,这是您需要的。作为一种解决方法,您可以在您的域上编写一个服务器端脚本,作为Yahoo和您的域之间的桥梁。然后,您将把AJAX请求发送到您的脚本。