从本地文件发出对 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 的跨域请求的主要内容,如果未能解决你的问题,请参考以下文章
rails 响应本地开发的跨域请求,spotify 应用程序开发