
项目中使用了react,当中需要使用Fetch来代替Ajax。
由于react的create_React_APP工具很方便,基本上开箱即用,经过创建项目,输入npm start命令后,便自动监听一个3000的端口,到此前端部分就绪。
后端部分我使用了phalcon。
由于前后端分离,为了方便,我尝试在Nginx中使之同域(前端和后台API的顶级域名相同),但phalcon框架是单入口、React监听3000时候,通过nginx反向代理,出现JS找不到的问题,于是放弃同域的打算。
因此我配置了两个域名:
第一个域名用于react部分,端口号是3000(调试用,正式上线是80)
第二个域名用于api,端口号是80
于是乎出现跨域问题。
以下是PHP部分的允许跨域域名访问的设置:
$origin = isset($_SERVER['http_ORIGIN'])?$_SERVER['HTTP_ORIGIN']:''; $allowOrigin = [ 'http://www.xxx.com', 'http://xxx.com' ]; if (in_Array($origin, $allowOrigin)) { header('Access-Control-Allow-Origin: ' . $origin); } header('Access-Control-Allow-Methods: PUT,post,get,DEletE,options'); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Allow-Headers: Content-type, Accept');
以下是fetch部分的ajax请求:
let postdata = {a:'b'}; fetch('http://DAta.xxx.com/Admin/Login/login', { method: 'POST', mode: 'cors', credentials: 'include', headers: { 'Content-Type': 'application/x-www-FORM-urlencoded' }, body: JSON.stringify(postData) }).then(function(response) { console.log(response); });





网友评论文明上网理性发言 已有0人参与
发表评论: