2016-04-07 35 views
2

我試圖使用維基數據API,但所有我得到的是:無法訪問維基數據API

提取API無法加載https://www.wikidata.org/w/api.php?action=wbsearchentities&search=Ingmar%20Bergman&language=en&limit=20&format=json&origin=http%3A%2F%2Fwww.dev.example.com%3A3000。對預檢請求的響應不會通過訪問控制檢查:請求的資源上不存在「訪問控制 - 允許來源」標頭。因此不允許訪問原產地'http://www.dev.example.com:3000'。如果一個不透明的響應滿足您的需求,請將請求的模式設置爲'no-cors'來取消禁用CORS的資源。

這是代碼:

const headers = new Headers(); 

const origin = "http://www.dev.example.com:3000"; 
headers.append("Origin", origin); 
headers.append("Content-Type", "application/json; charset=UTF-8"); 

const url = "https://www.wikidata.org/w/api.php"; 

const query = { 
    action: "wbsearchentities", 
    search: "Ingmar Bergman", 
    language: "en", 
    limit: 20, 
    format: "json", 
    origin 
}; 

const myInit = new Request(url + "?" + qs.stringify(query), { 
    method: "GET", 
    mode: "cors-with-forced-preflight", 
    headers 
}); 

fetch(myInit) 
    .then(function(res) { 
     console.log(res); 
    }) 
    .catch(function(err){ 
     console.log(err); 
    }); 

我試圖JSONP爲好,沒有成功。在瀏覽器中運行鏈接(只是沒有origin參數)會給出正確的響應。

+1

CORS目前僅被允許來自其他維基媒體域名。 JSONP應該可以工作。有關更多詳細信息,請參見[此答案](http://stackoverflow.com/a/32868530/323407)。 – Tgr

+0

另請參閱https://phabricator.wikimedia.org/T62835,這是一張標題爲「在API的JSON響應中啓用跨域API請求」的票證,可能對您有所幫助。 – Addshore

回答

2

那你爲什麼要加上「origin」參數呢?只需關閉它,或添加「& callback = some_function」即可獲取JSONP。

+0

刪除原始參數後,JSONP請求確實起作用。謝謝。 – Slaventsiy