
项目中使用了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人参与
发表评论: