前端问题报错: Access to XMLHttpRequest at 'http://xxx.com/xxx.html' from origin 'https://aaa.aaa.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
首先排除错误
- 后端是否已经正确配置跨域请求头。
- 前端配置是否可以,请求其他任意可以跨域的网站接口。
如果以上两点出问题了,可以看我的其他跨域配置文章,本篇文章不适合解决你的问题。
问题所在: 使用了 Request::instance()->param();
、 Request::instance()->post();
或者 Request::instance()->get();
等全部获取数据的方式。
原因: 上面这种 ThinkPHP
获取全部数据的方式,会对数据进行过滤,前端请求就会出现跨域报错的情况。
解决方式:
不要使用有过滤效果
的获取数据的方式,可以尝试下面的方法
$request = Request::instance();
// 接收 post
$id = $request->post('id');
// 接收 get
$id = $request->get('id');
如果还是不行
- 前端传递数据的时候,用
JSON.stringify(data)
转成JSON
字符串。 - 后端接收的时候,用
json_decode(html_entity_decode())
反编译就可以了。
前端
axios({
method: "POST",
url: `url`,
data: {
data_info: JSON.stringify(data_info),
}
}).then((res) => {
resp = res.data;
}).catch((req) => {
console.log(req);
});
后端
request = Request::instance();
$data_info = json_decode(html_entity_decode($request->post('data_info')))