thinkPHP跨域问题 Access to XMLHttpRequest at ‘http://xxx.com/xxx.html‘ from origin ‘https://aaa.aaa.com‘

前端问题报错: 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.

首先排除错误

  1. 后端是否已经正确配置跨域请求头。
  2. 前端配置是否可以,请求其他任意可以跨域的网站接口。

如果以上两点出问题了,可以看我的其他跨域配置文章,本篇文章不适合解决你的问题。

问题所在: 使用了 Request::instance()->param();Request::instance()->post(); 或者 Request::instance()->get(); 等全部获取数据的方式。

原因: 上面这种 ThinkPHP 获取全部数据的方式,会对数据进行过滤,前端请求就会出现跨域报错的情况。

解决方式:
不要使用有过滤效果的获取数据的方式,可以尝试下面的方法

$request = Request::instance();
// 接收 post
$id = $request->post('id');
// 接收 get
$id = $request->get('id');

如果还是不行

  1. 前端传递数据的时候,用 JSON.stringify(data) 转成 JSON 字符串。
  2. 后端接收的时候,用 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')))

猜你喜欢

转载自blog.csdn.net/qq_17627195/article/details/129266994