2010-09-08 119 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或其他)。