使用YQL的跨域请求

时间:2010-11-17 14:41:40

标签: javascript jquery yql

我正在尝试通过javascript使用Musicbrainz API。我发现我们现在可以使用YQL轻松执行crossmain。

我已经完成了一个jsfiddle文件:http://jsfiddle.net/HBCDF/1/

我对此代码段的问题是,当http响应是XML时,它不起作用。 有没有人知道如何更改代码段并能够获得XML结果?

格雷格

2 个答案:

答案 0 :(得分: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会响应您的服务器端页面,该页面响应客户端脚本。

答案 1 :(得分:0)

将format = json添加到YQL url

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/