我正在尝试通过 javascript 使用 Musicbrainz API。我发现我们现在可以使用 YQL 轻松执行 crossmain。
我已经完成了一个 jsfiddle 文件:http: //jsfiddle.net/HBCDF/1/
我对这个片段的问题是当 http 响应是 XML 时它不起作用。有谁知道我如何更改代码段并获得 XML 结果?
格雷格
我正在尝试通过 javascript 使用 Musicbrainz API。我发现我们现在可以使用 YQL 轻松执行 crossmain。
我已经完成了一个 jsfiddle 文件:http: //jsfiddle.net/HBCDF/1/
我对这个片段的问题是当 http 响应是 XML 时它不起作用。有谁知道我如何更改代码段并获得 XML 结果?
格雷格
跨域请求必须使用 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 响应您的服务器端页面,该页面响应客户端脚本。
将 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 )
支票