2010-11-17 127 views
2

我正在嘗試通過javascript使用Musicbrainz API。我發現我們現在可以使用YQL輕鬆執行crossmain。使用YQL跨域請求

而且我已經做了的jsfiddle文件這樣做:http://jsfiddle.net/HBCDF/1/

我在這個片段中的問題是,當HTTP響應是XML不起作用。 有沒有人有一個想法,我可以如何更改片段,並能夠獲得XML結果?

格雷格

回答

2

跨域請求必須使用JSONP正常Ajax請求不支持跨域調用來完成。不同的是,JSONP是賺不到真正的XmlHttpRequest,而不是它的加入給你的頁面:

<script type="text/javascript" src="TheCrossDomainUrl"></script> 

如果你想拉下來XML這種方式,因爲它不是有效的JavaScript將失敗。我相信有一些方法可以在不製作XmlHttpRequest的情況下下載XML(請參閱:http://ajaxian.com/archives/xml-messages-with-cross-domain-json)。

另一種選擇是添加一個服務器端頁面,爲您提供代理請求。您當前的頁面會向同一個域中的另一個頁面發出正常的XmlHttpRequest,該頁面會調用Musicbrainz,Musicbrainz會響應您的服務器端頁面,該頁面響應客戶端腳本。

+0

我知道這是舊的,答案已被接受,但別人可能出現跨越這個。而且,就x域請求和ajax而言答案是正確的,但仍然可以使用YQL來檢索XML。在這種情況下,YQL查詢顯示「select * from html where ...」,但您得到的是XML ...沒有HTML元素。將其更改爲「select * from xml where ...」,並且您是黃金版。請記住,XML響應是根元素的XML元素。 – Daved 2014-03-05 04:03:11

0

添加格式= JSON到YQL網址

var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + site + '"') + '&format=json&callback=?'; 

,並使用if (data.query.results != null)檢查

http://jsfiddle.net/HBCDF/3/