项目场景:
使用TP6制作前端小程序的API接口,遇到跨域问题,多方尝试后 已解决问题描述:
Access to XMLHttpRequest at 'https://www.XXX.com/Api/getData' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.原因分析:
由于是刚接触TP6不久,所以看了一下官方文档-中间件,发现官方已经内置了一个中间件来解决跨域问题:
要是真的能这么简单解决,我也不会记录这个问题了…
解决方案(官方):
按照官方的解决方法,打开 app/middleware.php ,文件末尾加上 \think\middleware\AllowCrossDomain::class
<?php
// 全局中间件定义文件
return [
// 全局请求缓存
// \think\middleware\CheckRequestCache::class,
// 多语言加载
// \think\middleware\LoadLangPack::class,
// Session初始化
// \think\middleware\SessionInit::class
//
// 跨域请求
\think\middleware\AllowCrossDomain::class
];
保存 -->刷新
发现依然没有解决!!!
解决方案(最终):
探索的辛酸泪史就不啰嗦了,直接上解决办法:
方法一
由于直接访问 controller ,它是不允许返回数组的,所以返回成JSON格式的就行。
官方的解决方案也要做,这一方法才生效哦
public function getData(){
$db = new Data();
$select = $db->select();
$select = $select->toArray();
return json($select);
}
方法二
直接在函数的开头添加 header(‘Access-Control-Allow-Origin: *’);
这个方法不需要使用官方中间件
public function getData(){
header('Access-Control-Allow-Origin: *');
$db = new Data();
$select = $db->select();
$select = $select->toArray();
return json($select);
}