【问题标题】:Crossdomain request with YQL使用 YQL 的跨域请求
【发布时间】:2010-11-17 14:41:40
【问题描述】:

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

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

我对这个 sn-p 的问题是当 http 响应是 XML 时它不起作用。 有谁知道我如何更改 sn-p 并能够获得 XML 结果?

格雷格

【问题讨论】:

    标签: javascript jquery yql


    【解决方案1】:

    跨域请求必须使用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 会响应您的服务器端页面,该页面会响应客户端脚本。

    【讨论】:

    • 我知道这是旧的并且答案已被接受,但其他人可能会遇到这个问题。而且,虽然答案在 x 域请求和 ajax 方面是正确的,但您仍然可以使用 YQL 来检索 XML。在这种情况下,YQL 查询显示“select * from html where...”,但您正在获取 XML...没有 HTML 元素。将其更改为“select * from xml where ...”,您就很成功了。请记住,XML 响应是根中的 XML 元素。
    【解决方案2】:

    将 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 2013-08-03
      • 1970-01-01
      • 2016-03-15
      • 2018-04-23
      • 2011-11-30
      相关资源
      最近更新 更多