javascript - 需要有关使用 JavaScript 获取跨域 XML 的帮助

标签 javascript jquery xml cross-domain

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

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

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”对象中读取数据。相当简单。

然而,这就是问题所在。该代码在我的计算机上本地运行时完美运行,但当我将所有内容上传到我的网络服务器并尝试在那里运行时,它根本不起作用。我做了一些阅读,发现由于安全问题,无法跨不同域进行 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:

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

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


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

JSON 是 Javascript,可以使用 <script> 查询标记而不是 XMLHttpRequest。自 <script> tag对跨域请求没有同样的限制,可以通过这种方式获取JSON内容。

此技术称为 JSONP并在 getJSON 中用 jQuery 实现功能。

关于javascript - 需要有关使用 JavaScript 获取跨域 XML 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1550839/

相关文章:

javascript - 我可以将样式设置为来自样式化组件的文档正文吗?

javascript - 使用 Modernizr.load 在 Rails 3.2 中加载资源

jquery - Javascript 的 IE 条件

jquery - 使用 jQuery.support 检测 IE6

java - JAXB 获取元素的所有内容(标签和文本)

xml - xslt 在模板中集成一个 xsl

javascript - Testflight版本中React Native元素的位置错误

javascript - 无法将路由从 react-router v3 转换为 v4

javascript - jQuery 如何以中断方式包装同级 Div

java - 如何将 ScrollView 添加到我的 xml 中?