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

好吧,所以我正在构建一个提供音乐信息的网络应用程序(即关于艺术家,专辑,歌曲等的信息)以及我正在使用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菜鸟实现的另一种方法。

谢谢你的帮助!

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

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

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


编辑以下是一个非常简单的 PHP脚本示例,它将检索指定的URL:

  

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


我知道JSON现在不是一个选项,但是,这里解释了为什么它可以用于跨域请求。

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

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

如果您不想设置自己的代理服务器,请在此处查看我的响应: 使用jsonp获取xml跨域