2010-09-08 72 views
2

FCC最近提供了一个小set of API calls to access FCC data。特别是,我对Consumer Broadband Test API感兴趣。我试图通过jQuery访问这个API,但是失败了。请让我知道,如果我的代码做错了,或者这似乎是FCC的API的问题。为什么这个jQuery Ajax请求失败?

如果您访问在浏览器这个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

我不认为这是有可能做跨域Ajax请求。您可能需要这样做:http://jquery-howto.blogspot.com/2009/04/cross-domain-ajax-querying-with-jquery.html – krx 2010-09-08 20:11:22

回答

4

要解决同源策略,您需要使用JSONP。由API编写的It is supported。添加callback=?至URL字符串在.getJSON()电话:

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

所以,这样的事情:

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

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

+0

这样做的伎俩,谢谢!不过,我不得不使用jsoncallback而不是回调。 – Jeff 2010-09-08 20:45:19

3

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

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