2013-04-18 93 views
0

我想訪問REACTOME REST API來檢索一些數據。我正在使用getJSON()獲取JSON數據。但我不知道callback function name,因爲每個網站的名稱都不相同。getJSON中的JSON回調函數名稱()

以下是不工作:

$.getJSON('http://reactomews.oicr.on.ca:8080/ReactomeRESTfulAPI/RESTfulWS/frontPageItems/homo+sapiens?jsoncallback=?', function(data) { 

console.dir(data); }); 

我嘗試使用AJAX太,因爲我們可以留下jQuery來決定的回調函數jQuery的文檔的狀態。

$.ajax({ 
    type: 'GET', 
    url: 'http://reactomews.oicr.on.ca:8080/ReactomeRESTfulAPI/RESTfulWS/frontPageItems/homo+sapiens', 
    dataType: 'jsonp', 
    success: function(data) { 
     console.dir(data); 
    }, 
    error: function(e) { 
     console.log("error"); 
+0

嗯,當我去那個鏈接所有我看到的是XML,JSON不是,這是爲什麼? – 1337holiday 2013-04-18 06:44:42

+1

您需要發送請求頭'Accepts:application/json' – 2013-04-18 06:45:49

+0

@ 1337holiday默認爲XML。您也可以將JSON設置爲數據類型。正如Chrome開發人員控制檯所示,JSON文件正在下載。 – dejavu 2013-04-18 06:52:33

回答

1

所有跡象都表明服務支持JSONP。

jQuery中的實際錯誤是:TypeError: Property 'message' of object Error: jQuery191005664544063620269_1366270377427 was not called is not a function

檢查發出JSONP請求時服務器的響應,它是NOT包裝在回調函數中。因此,它返回此...

[ { 
    "dbId" : 109581, 
    "displayName" : "Apoptosis", 
    "created" : { 
    "dbId" : 109608, 
.... 

但支持JSONP那就需要,而不是像:

jQuery191005664544063620269_1366270377427([ { 
    "dbId" : 109581, 
    "displayName" : "Apoptosis", 
    "created" : { 
    "dbId" : 109608, 
....) 

你需要找到一個不同的方式來處理same origin security限制。

最簡單的選擇可能是使用服務器端代理,而不是直接通過瀏覽器。換句話說,jQuery會在你自己的控制下調用一個服務器(最好在服務於HTML的同一個域上),然後它將通過服務請求並提供適當的響應。或者如果你不需要動態的在客戶端上,只需要服務器端腳本整個事情(ASP.NET,php等)

+0

我寧願人們停止調用跨域請求CORS。如果跨域請求,CORS是一個非常具體的機制。另外,正如你所提到的,是代理請求而不是使用CORS。另一個是使用JSONP而不是使用CORS。 – slebetman 2013-04-19 01:19:08

+0

@slebetman當我們准許願望的時候,我可以在萊茵河畔找到一所房子嗎?沒有?哦,至少我可以編輯我的答案... – Snixtor 2013-04-19 02:17:10