【问题标题】:Make a Cross-Domain request for XML from a local file从本地文件发出对 XML 的跨域请求
【发布时间】: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 服务器提供的页面。
  • 嗨,肖恩,您能总结一下您提出的解决方案吗?

标签: javascript xml ajax jsonp same-origin-policy


【解决方案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 数据作为该函数的输入。

【讨论】:

    猜你喜欢
    • 2017-09-15
    • 2018-09-20
    • 2012-12-15
    • 2018-04-12
    • 2016-10-06
    • 2016-06-24
    • 1970-01-01
    • 2013-09-14
    • 2021-12-19
    相关资源
    最近更新 更多