【问题标题】:Need Help With Getting Cross Domain XML With JavaScript在使用 JavaScript 获取跨域 XML 方面需要帮助
【发布时间】:2010-12-05 18:28:07
【问题描述】:

好的,所以我正在构建一个提供音乐信息(即关于艺术家、专辑、歌曲等的信息)的网络应用程序,并且我正在使用 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' 对象中读取数据。相当简单。

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

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

所以无论如何,我基本上只是想知道是否有人可以给我一些帮助或指示我是否以及如何仅使用 JS/jQuery 来获取远程 XML 文件。或者,向我指出另一种方法,它可以由像我这样的完整 PHP 菜鸟完成。

感谢您的帮助!

【问题讨论】:

    标签: javascript jquery xml cross-domain


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您需要在您的服务器端使用某些东西将您的请求代理到其他服务器。如下所示的 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,可以使用 &lt;script&gt; 标签而不是 XMLHttpRequest 来查询。由于&lt;script&gt;标签对跨域请求没有相同的限制,因此可以通过这种方式检索JSON内容。

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

      【讨论】:

      • 太棒了!那么你能详细说明一下这个的实际实现吗? (对不起,但就像我说的,我不知道关于 PHP 的第一件事 :))。我是否只需下载一个 PHP 代理脚本,将其添加到我的服务器,然后用您在上面发布的 URL 替换我当前获取的 URL(通过 Javascript)?
      • 用一个非常简单的 PHP 代理脚本编辑了我的答案
      • 你是个很棒的人——应该可以工作,因为除了读取数据我不需要做任何事情。但是,我只是想最后一次确认一下-我将那一行 PHP 放入外部 PHP 文件(保存在我的站点目录中),然后在我的 URL 之前添加“/proxy?url=”想得到,应该这样做?
      • 编辑:说得太早了——我将您提供的 PHP 代码添加到一个空白 PHP 文件中,将其保存为“proxy.php”,然后在开头添加“/proxy?url=”查询 URL,但仍然没有运气 - 从未调用“成功”函数,因此它仍然没有获取 XML 文件。还有其他想法吗?
      • 另外,我是否必须用转义字符替换所有特殊字符才能正常工作? (就像你做的那样,即'%3F')
      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多