如何将 jQuery AJAX 用于外部域?
Posted
技术标签:
【中文标题】如何将 jQuery AJAX 用于外部域?【英文标题】:How to use jQuery AJAX for an outside domain? 【发布时间】:2010-12-02 03:23:30 【问题描述】:我正在尝试使用 .get() 或 .post() 执行简单的 jQuery AJAX 尝试。
如果我的服务器上有本地副本并执行以下操作:
$.get('/hash.php',...,...)
我在我的控制台中用 firebug 监控 get 已完成并得到响应。
我改变的只是外部服务器的 URI,没有任何反应。
$.get('https://secure.mysite.com/subdir/hash.php',...,...)
如果我去掉 's' 或者我使用 post 来代替,都没有帮助。我是否遗漏了一些我应该在 jQuery 中使用的参数?
编辑:我忘了提到我这样做的原因是因为我最终要从 PHP4 站点迁移到 PHP5 站点,但是现在 PHP4 站点需要一个 PHP4 中没有的函数。所以我正在调用 PHP5 服务器来完成它。我想我有一个很好的解决方法。谢谢!
【问题讨论】:
【参考方案1】:您不能将 Ajax 请求发送到部署应用程序的另一个域之外的另一个域。这是因为在网络浏览器中实现了Same Origin Policy——一种安全措施。
不过,有两种可能的解决方案:
将请求发送到您自己的服务器,该服务器将充当另一个服务器的代理(通过 PHP 脚本,或者更好的是,使用 Apache 的一些mod_proxy_http
模块)
或不使用“Ajax”,而是使用其他技术,例如动态创建 <script>
标记——它们不受 SOP 约束。
【讨论】:
你可以使用jsonp
,它只是你提到的<script>
标签解决方案的一个美化版本。【参考方案2】:
确实,由于浏览器的原因,您通常无法在域外执行 Ajax。但是使用 JSONP 可以做到这一点。 jQuery 现在也有一个用于 Ajax 的 jsonp 参数。要完成这项工作,您需要控制服务器的输出。
【讨论】:
【参考方案3】:javascript 无法访问 javascript 文件来源之外的服务器。
这是一项安全功能。
根据您想要获得的特定于浏览器的方式,您可能会绕过这个问题,但这会变得有点滑坡。
【讨论】:
【参考方案4】:您不能直接进行跨域 ajax 请求,这将是一个安全问题。
您需要从 jquery 调用本地 php 文件,并让 php 文件与其他域通信。
【讨论】:
【参考方案5】:有一种称为 JSONP 的方法可以用来规避这种情况。见SO #570100第二个回复
【讨论】:
以上是关于如何将 jQuery AJAX 用于外部域?的主要内容,如果未能解决你的问题,请参考以下文章