gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:56:02 25 4
gpt4 key购买 nike

好吧,我正在构建一个提供音乐信息(即关于艺术家、专辑、歌曲等的信息)的网络应用程序,并且我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com