如何在 Javascript 中进行跨域 http 请求?

Posted

技术标签:

【中文标题】如何在 Javascript 中进行跨域 http 请求?【英文标题】:How do I do cross-domain http requests in Javascript? 【发布时间】:2011-11-17 16:05:47 【问题描述】:

所以我正在开发一个 Sencha (javascript) 应用程序,该应用程序需要向另一个域中已经存在的 REST 服务发出 Ajax http 请求。我需要一个能够从我的 Sencha javascript 向该服务发出 POST、PUT 和 GET 请求的解决方案。我无法控制服务,因此我无法对此进行任何更改。我听说过 html5 的新 postMessage() 方法,但我不确定如何使用,或者我是否能够使用它来做我想做的事。当然,我可以在开发过程中禁用浏览器安全性,但这不是永久的解决方案。有什么建议吗?

特别是,如果有人能告诉我 postMessage 方法的用途,我将不胜感激。

【问题讨论】:

跨域请求是不可能的,特别是如果您无法更改其他服务的任何内容。当然,如果你使用的是 PhoneGap 之类的东西,那就完全不同了。在这种情况下,你可以为所欲为。 【参考方案1】:

如果响应是 JSON,您可以使用JSONP。如果您要发帖,请使用隐藏的 iframe。

【讨论】:

这很简单——给出 iframe 和名称,将表单的目标设置为 iframe。该 URL 将是另一个域的 POST url。您可以将 onload 事件附加到 iframe,它会在您的帖子完成时告诉您。让 iframe 可见以进行测试,然后在完成后将高度和宽度设置为零。【参考方案2】:

您可以使用服务器端代理(php、servlet ....),它将分派您的跨域请求、拉取响应,然后将结果返回到客户端的 javascript。

【讨论】:

以上是关于如何在 Javascript 中进行跨域 http 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)

如何在 django 中使用 Javascript 获取跨域数据?

Javascript Ajax总结——跨域资源共享

JavaScript 跨域调用:从 HTTP 调用到 HTTPS

http跨域解决方案

Ajax跨域问题