Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用YQL的跨域请求_Javascript_Jquery_Yql - Fatal编程技术网

Javascript 使用YQL的跨域请求

Javascript 使用YQL的跨域请求,javascript,jquery,yql,Javascript,Jquery,Yql,我正在尝试通过javascript使用Musicbrainz API。我发现我们现在可以使用YQL轻松地执行crossmain 我已经完成了一个JSFIDLE文件,可以这样做: 我对这个代码段的问题是,当http响应是XML时,它不起作用。 有人知道如何更改代码段并获得XML结果吗 Greg跨域请求必须使用jsonp完成,因为普通ajax请求不支持跨域调用。不同之处在于,jsonp并没有生成真正的XmlHttpRequest,而是将其添加到页面中: <script type="text/j

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

我已经完成了一个JSFIDLE文件,可以这样做:

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


Greg

跨域请求必须使用jsonp完成,因为普通ajax请求不支持跨域调用。不同之处在于,jsonp并没有生成真正的XmlHttpRequest,而是将其添加到页面中:

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

如果您试图以这种方式下拉XML,它将失败,因为它不是有效的javascript。我相信有一些方法可以在不进行XmlHttpRequest的情况下提取XML(请参阅:)


另一个选择是添加一个服务器端页面,为您代理请求。当前页面将对同一域中的另一个页面进行普通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)
检查


我知道这是一个古老的问题,答案已经被接受,但其他人可能会遇到这个问题。而且,虽然答案在x域请求和ajax方面是正确的,但您仍然可以使用YQL检索XML。本例中的YQL查询显示“从html中选择*,其中…”,但您得到的是XML。。。没有HTML元素。将其更改为“select*fromXML where…”,您将获得金牌。请记住,XML响应是根上的XML元素。