我有2个结构域(结构域A,结构域B)。
在域A置于ZF2应用程序,一切正常。
域B置于着陆页(小网站与形式来收集数据)。
从着陆页我想表单数据发送到域A(AJAX请求)的应用程序。
可惜的是在域A ZF2应用程序没有接收数据,并没有显示出结果。 一切都OK了,当我做从那里ZF2的应用程序是相同的域Ajax请求。
我试图使用JSONP但没有成功。
我没有任何其他线索如何迫使这个工作。
我有2个结构域(结构域A,结构域B)。
在域A置于ZF2应用程序,一切正常。
域B置于着陆页(小网站与形式来收集数据)。
从着陆页我想表单数据发送到域A(AJAX请求)的应用程序。
可惜的是在域A ZF2应用程序没有接收数据,并没有显示出结果。 一切都OK了,当我做从那里ZF2的应用程序是相同的域Ajax请求。
我试图使用JSONP但没有成功。
我没有任何其他线索如何迫使这个工作。
作为Bodgan的回答说,这是一个浏览器的安全问题,而不是ZF2问题。 一种流行的方式来解决它是改变ACCESS-CONTROL-ALLOW-ORIGIN
域A的以允许从域B.这和其他解决方案的要求Mozilla开发者网络(MDN)页面上进行了讨论HTTP访问控制(CORS ) 。
基本上你需要告诉接收服务器(域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助手将设置你的编码头和一些其他的东西太多使用
$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先进的CORS与ZF2,但一个简单的JSON端点与上面的应该只是罚款。
跨域Ajax请求被禁止由于安全方面的原因(这就是所谓的同源策略)。 http://en.wikipedia.org/wiki/Same_origin_policy