为什么这个jQuery Ajax请求失败?

时间:2010-09-08 20:05:18

标签: ajax jquery

FCC最近提供了一个小set of API calls to access FCC data。特别是,我对Consumer Broadband Test API感兴趣。我试图通过jQuery访问此API但是失败了。如果我的代码出错了,或者这似乎是FCC API的问题,请告诉我。

如果您在浏览器中访问此API请求,则会很快返回XML响应:http://data.fcc.gov/api/speedtest/find?latitude=30.240236062827297&longitude=-97.64787337499999

所以我尝试使用各种方法在jQuery中加载这些数据:

var url = "http://data.fcc.gov/api/speedtest/find?latitude=30.240236062827297&longitude=-97.64787337499999";

$.ajax({
    type: "GET",
    url: url,
    success: function(data) {
        console.log("ajax: " + data);
    }
});

$.getJSON(url, function(data) {
    console.log("getJSON: " + data);
});

$.get(url, function(data) {
    console.log("get: " + data);
});

在Firebug控制台中,所有三个请求都显示200(OK)状态,但响应正文为空。此外,生成的console.log消息为:

ajax: 
getJSON: null
get: 

我在这里做错了吗?

2 个答案:

答案 0 :(得分:4)

要解决同源策略,您需要使用JSONP。 API的It is supported。将callback=?添加到.getJSON()来电中的网址字符串:

  

如果URL包含字符串   “回调=?”在URL中,请求   被视为JSONP。见   关于jsonp数据类型的讨论   $ .ajax()了解更多详情。

所以,像这样:

var url = "http://data.fcc.gov/api/speedtest/find?...&callback=?";
$.getJSON(url, function(data) {
  // do stuff
});

参考文献:http://api.jquery.com/jQuery.getJSON/

答案 1 :(得分:3)

您无法使用AJAX进行跨域调用。它不像那样工作。

您可能想要做的是让您的AJAX查询URL成为您自己服务器上的本地脚本,然后让该脚本运行API URL请求(使用cURL或其他东西)。