TP6解决跨域问题

本文记录了在使用ThinkPHP6(TP6)框架开发前端小程序API时遇到的跨域问题及其解决过程。首先尝试了官方提供的允许跨域的中间件,但在实际应用中并未奏效。最终通过两种方法成功解决了问题:一是将返回数据格式化为JSON;二是直接在函数头部添加`header('Access-Control-Allow-Origin:*')`。这两种方法都可以有效解决跨域限制。
摘要由CSDN通过智能技术生成

项目场景:

使用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不久,所以看了一下官方文档-中间件,发现官方已经内置了一个中间件来解决跨域问题:
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);
}

至此,跨域问题解决

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值