1、什么是请求类型错误
在使用thinkphp进行开发时,如果出现请求类型错误提示,一般是提交的数据请求类型与接收端不匹配导致的。请求类型错误可以表现为以下几种情况:
使用了POST请求,但指定的方法为GET
使用了GET请求,但指定的方法为POST
使用的请求方法不在允许范围内(如PATCH、PUT等)
2、请求类型错误的解决方法
2.1、检查请求方法
当出现请求类型错误时,最好先检查代码中是否存在问题,比如常见的问题就是请求方法与路由中的方法不匹配。如果是这种情况,只需要修改代码即可:
//修改前
Route::rule('test','index/test','get');
//修改后
Route::rule('test','index/test','post');
如果代码不存在问题,则很可能是前端提交的请求类型与后端的不同导致的,这时需要继续下一步检查。
2.2、检查前端请求类型
在前端使用Ajax请求时,需要指定请求类型,如下:
$.ajax({
url: '/test',
type: 'POST',
dataType: 'json',
success: function(res){
console.log(res);
},
error: function(err){
console.log(err);
}
});
由于请求类型错误是由前端提交的请求类型与后端接口的请求类型不同导致的,因此我们可以在控制器中输出请求类型,看看请求类型是否与代码中设置的请求类型相同:
public function test(){
echo '请求类型:'.$_SERVER['REQUEST_METHOD']; //输出请求类型,如:GET、POST等
}
如果输出的请求类型与代码中设置的请求类型不同,就需要修改请求类型。
2.3、修改thinkphp框架配置
有时,由于thinkphp框架默认只允许GET和POST请求,因此需要修改配置文件开启其他请求类型。
打开config目录下的文件app.php,在中间件配置中增加AllowCrossDomain中间件,并将request_methods参数改为允许的请求类型:
'middleware' => [
\think\middleware\AllowCrossDomain::class => [
'header' => ['*'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
'Access-Control-Allow-Headers' => 'X-Requested-With, Content-Type, Y-Token',
],
],
3、总结
请求类型错误是在thinkphp开发中比较常见的问题,通过对问题出现原因的分析和检查,我们可以找到问题并解决。在进行代码开发时,需要注意前后端请求类型是否一致,同时也可以通过增加中间件来允许其他类型的请求。