2015-04-03 78 views
0

CrossRef Search API(docs here)提供來自DOI標識符的引用信息。我tried使用它來獲得這個信息,但奇怪地得到404響應。CrossRef Search API是否支持跨域請求?

我設置的標頭是

Content-type: application/json 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, OPTIONS 
Access-Control-Allow-Headers: Content-Type 
Access-Control-Max-Age: 86400 

我得到相同的結果,從this appspot tester,所以我不認爲這是我的代碼。

任何人都可以告訴我如何才能得到它的工作?它在自己的領域工作得很好。

可能他們根本不允許跨域,但我不確定是否/如何檢查。

重複的例子:

function doiInfo(doi) { 
    var doienc = encodeURIComponent(doi); 
    var doiXHR; 
    window.XMLHttpRequest ? doiXHR=new XMLHttpRequest() : doiXHR=new ActiveXObject("Microsoft.XMLHTTP"); 

    doiXHR.onreadystatechange=function() 
    { 
    if (doiXHR.readyState==4 && doiXHR.status==200) 
    { 
     console.log(doiXHR.responseText); 
    } else if (doiXHR.readyState==4) { 
     // something went wrong 
    } 
    } 

    doiXHR.open("GET", "http://search.crossref.org/dois?q=" + doienc, true); 
    doiXHR.setRequestHeader("Content-type", "application/json;"); 
    doiXHR.setRequestHeader("Access-Control-Allow-Origin", "*"); 
    doiXHR.setRequestHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); 
    doiXHR.setRequestHeader("Access-Control-Allow-Headers", "Content-Type"); 
    doiXHR.setRequestHeader("Access-Control-Max-Age", "86400"); // cache for 1 day 

// doiXHR.withCredentials = "true"; 
    doiXHR.send(); 
} 
doiInfo('10.1002/bies.201000071') 

在瀏覽器控制檯從crossref.org我得到

[ 
    { 
    "doi": "http://dx.doi.org/10.1002/bies.201000071", 
    "score": 18.623272, 
    "normalizedScore": 100, 
    "title": "The phage-host arms race: Shaping the evolution of microbes", 
    "fullCitation": "Adi Stern, Rotem Sorek, 2010, 'The phage-host arms race: Shaping the evolution of microbes', <i>BioEssays</i>, vol. 33, no. 1, pp. 43-51", 
    "coins": "ctx_ver=Z39.88-2004&amp;rft_id=info%3Adoi%2Fhttp%3A%2F%2Fdx.doi.org%2F10.1002%2Fbies.201000071&amp;rfr_id=info%3Asid%2Fcrossref.org%3Asearch&amp;rft.atitle=The+phage-host+arms+race%3A+Shaping+the+evolution+of+microbes&amp;rft.jtitle=BioEssays&amp;rft.date=2010&amp;rft.volume=33&amp;rft.issue=1&amp;rft.spage=43&amp;rft.epage=51&amp;rft.aufirst=Adi&amp;rft.aulast=Stern&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.au=Adi+Stern&amp;rft.au=+Rotem+Sorek", 
    "year": "2010" 
    } 
] 

從我的網站上運行它(不是HTTPS)我得到

OPTIONS http://search.crossref.org/dois?q=10.1002%2Fbies.201000071 404(未找到) XMLHttpRequest無法加載http://search.crossref.org/dois?q=10.1002%2Fbies.201000071。無效的HTTP狀態代碼404

GET/OPTIONS問題之外,它肯定似乎到頁面上,這似乎並沒有對上獲得404。

我想你可以用iframe和window.postMessage(?)解決它,但聽起來很亂。

請評論,如果我可以提供更多的細節,我會很高興,似乎沒有任何人在網上做過這個 - 希望不是因爲這是不可能的!

回答

1

回答你的問題的標題:是的,它允許跨源請求。 404表示錯誤的資源。交叉來源問題會給你一個401.

允許來源標題指示資源可以從所有位置訪問。看看我的工作示例:http://pastebin.com/8W23P48Z