我有 2 个域(域 A,域 B)。
在域 A 上放置了 ZF2 应用程序,一切正常。
在域 B 上放置着陆页(带有收集数据的表格的小站点)。
从登陆页面我想将表单数据发送到域 A 上的应用程序(AJAX 请求)。
不幸的是,域 A 上的 ZF2 应用程序没有收到数据,也没有显示结果。当我从 ZF2 应用程序所在的同一域发出 AJAX 请求时,一切正常。
我尝试使用 JSONP 但没有成功。
我没有任何其他线索如何强制它工作。
我有 2 个域(域 A,域 B)。
在域 A 上放置了 ZF2 应用程序,一切正常。
在域 B 上放置着陆页(带有收集数据的表格的小站点)。
从登陆页面我想将表单数据发送到域 A 上的应用程序(AJAX 请求)。
不幸的是,域 A 上的 ZF2 应用程序没有收到数据,也没有显示结果。当我从 ZF2 应用程序所在的同一域发出 AJAX 请求时,一切正常。
我尝试使用 JSONP 但没有成功。
我没有任何其他线索如何强制它工作。
正如 Bodgan 的回答所说,这是一个浏览器安全问题,而不是 ZF2 问题。解决此问题的一种流行方法是更改域 A 以允许来自域 B 的请求。有关HTTP 访问控制 (CORS)ACCESS-CONTROL-ALLOW-ORIGIN
的 Mozilla Developer Network (MDN) 页面上讨论了此解决方案和其他解决方案。
基本上,您需要向接收服务器(域 A)表明可以响应资源请求。您可以在.htaccess
域 A 的 Web 根目录中的文件中执行此操作。下面是一些简单的示例代码,向域 A 指示它应该响应来自所有域的资源共享请求:*
. 上面链接的 MDN 文章对“跨域资源共享 (CORS)”进行了更深入的讨论。请记住,存在安全隐患,并且在大多数情况下,您不想将服务器开放给来自*
源的请求,而是开放给您自己控制的特定主机。
Options +FollowSymlinks
RewriteEngine on
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
您可以更改您的 htaccess 文件以支持,但最简单的方法是使用响应类:
$this->_response->setHeader('Access-Control-Allow-Origin', '*');
http://framework.zend.com/manual/2.0/en/modules/zend.http.response.html
如果您使用 json 作为端点数据源,请将其与 json helper 结合使用,后者将设置您的编码标头和其他一些东西
$this->_helper->json->sendJson($jsonIsite);
http://framework.zend.com/manual/2.0/en/modules/zend.json.introduction.html
有https://github.com/zf-fr/zfr-cors用于带有 ZF2 的高级 CORS,但上面的简单 json 端点应该可以正常工作。
由于安全原因,禁止跨域 ajax 请求(这称为同源策略)。 http://en.wikipedia.org/wiki/Same_origin_policy