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:
我在这里做错了吗?
答案 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
});
答案 1 :(得分:3)
您无法使用AJAX进行跨域调用。它不像那样工作。
您可能想要做的是让您的AJAX查询URL成为您自己服务器上的本地脚本,然后让该脚本运行API URL请求(使用cURL或其他东西)。