从本地文件发出对 XML 的跨域请求

Posted

技术标签:

【中文标题】从本地文件发出对 XML 的跨域请求【英文标题】:Make a Cross-Domain request for XML from a local file 【发布时间】:2012-02-08 09:30:45 【问题描述】:

我不确定这是否可能。基本上我想在客户端 PC 上加载一个本地 html 文件并让它向远程服务器发出请求。服务器提供的数据是 XML。

当我说我正在加载文件时,我的意思是 chrome 中的 URL 显示为“file:///E:/​​...”

这是我最接近能够加载 XML 的方法。我检查了客户端上的网络选项卡并成功加载,我似乎无法将 XML 放入我可以检查的元素中:

 var script = document.createElement('script');

 script.setAttribute('src', 'http://xxx.xx.xx.xxx:xxxx/myxmldata');

 script.setAttribute('type', 'text/xml');

 script.setAttribute('id', 'myxml');

 document.getElementsByTagName('head')[0].appendChild(script); 

 var content = document.getElementById("myxml").responseText;// anything I can do here?

 console.log(content);

AJAX 解决方案也可以。我对 JSONP 没有任何运气(虽然这不是 JSON)。

【问题讨论】:

愚蠢的问题,您是在对不同域中的远程服务器进行 Ajax 调用吗? 是的。我需要绕过相同的原产地政策。此外,这只是在浏览器中打开的本地文件,而不是 Web 服务器提供的页面。 嗨,肖恩,您能总结一下您提出的解决方案吗? 【参考方案1】:

好吧,如果您对跨域策略有疑问,您可能需要构建某种代理来为您处理请求。 (制作起来很简单)

如果你想打开一个 javascript 文件来发出一个 Ajax 请求,我会使用 Dojo 来解析 XML。

你有一个很好的例子:http://dojotoolkit.org/reference-guide/dojo/xhrGet.html

希望对您有所帮助。

【讨论】:

嗨,sfratini,您能否提供更多关于如何创建这样一个代理的信息? 对不起,我在度假。我将把它留在这里,因为它可能对其他人有用。 ajax 通常的限制是向不共享相同主机名的服务器发出请求。这是一个安全问题。您可以通过在服务器中添加对脚本的访问来解决此问题,但通常这是不可能的。但是您可以做的是向 servlet 发出请求,这实际上会为您发出请求。使用 Java,您可以使用服务器中的 URL 和 Connection 类来执行此操作。这样你就不会阻塞客户端浏览器,因为你向你的 servlet 发送了另一个带有 ajax 请求的线程。【参考方案2】:

无论负载类型是 JSON 还是 XML,您所做的都是 JSONP,结果是一个 javascript 函数调用。所以响应必须是一个有效的 javascript 函数调用,并将 XML 数据作为该函数的输入。

【讨论】:

以上是关于从本地文件发出对 XML 的跨域请求的主要内容,如果未能解决你的问题,请参考以下文章

防止对我的 wcf 服务的跨域请求

rails 响应本地开发的跨域请求,spotify 应用程序开发

vue工程本地代码请求http发生跨域提示错误解决方法

跨域请求本地文件

是否可以在 IE 中进行从 https 到 http 的跨域请求?

对 Python Bottle 的跨域 Angular JSONP 请求