使用JavaScript获取跨域XML需要帮助

时间:2009-10-11 14:39:21

标签: javascript jquery xml cross-domain

好吧,所以我正在构建一个提供音乐信息的网络应用程序(即关于艺术家,专辑,歌曲等的信息)以及我正在使用MusicBrainz API的信息源。

现在,我正在尝试从API调用加载数据并使用jQuery处理它。这是我正在使用的代码:

Code:
queryString="http://musicbrainz.org/ws/1/artist/?type=xml&name="+qry+"&limit=10"; 
$.ajax({url: queryString, dataType: ($.browser.msie) ? "text" : "xml", success: function(data){ 
      alert("success"); 
      var xml; 
      if (typeof data == "string") { 
             xml = new ActiveXObject("Microsoft.XMLDOM"); 
             xml.async = false; 
             xml.loadXML(data); 
        } else { 
             xml = data; 
        }; 
...

使用'queryString'作为请求的URL字符串,然后我将继续从'xml'对象中读取数据。相当简单。

但是,这就是出现问题的地方。在我的计算机上本地运行时,代码可以完美运行,但是当我将所有内容上传到我的Web服务器并尝试在那里运行时,它根本不起作用。我做了一些阅读,并发现由于安全问题,无法跨不同域进行AJAX调用。

所以我已经阅读了很多解决方案,但几乎所有解决方案都要求PHP(我完全不知道)或者以JSON格式获取数据(显然不受相同的安全限制)。但是,我的主要问题是MusicBrainz API不返回JSON格式的数据(实际上它返回的唯一格式是XML)。

所以在任何情况下,我基本上只是想知道是否有人可以给我一些帮助或指示我是否以及如何仅使用JS / jQuery获取远程XML文件。或者,指出我可以通过像我这样的完整PHP菜鸟实现的另一种方法。

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

您需要服务器端的某些内容将您的请求代理到其他服务器。一个看起来像这样的网址:

/proxy?url=http%3A//musicbrainz.org/ws/1/artist/%3Ftype%3Dxml%26name%3Dexample%26limit%3D10

如果您的服务器上有PHP,则可以通过Google查找通用的PHP代理脚本。


编辑以下是非常简单的 PHP脚本的示例,该脚本将检索指定的网址:

<?php readfile($_GET['url']) ?>

请注意,您将无法向其发送任何数据,也无法指定Content-Type。这是非常基本需求所需的最基本代理。


据我所知,JSON目前不是一个选项,但仍然可以解释为什么它可以用于跨域请求。

JSON是Javascript,可以使用<script>标记而不是XMLHttpRequest来查询。由于<script>标记对跨域请求没有相同的限制,因此可以通过这种方式检索JSON内容。

此技术称为JSONP,在getJSON函数的jQuery中实现。

答案 1 :(得分:0)

如果您不想设置自己的代理服务器,请在此处查看我的回复:use jsonp to get xml cross domain