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')))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值