yii2 html form,YII2中ajax通过post提交form表单数据报400错误的解决方法

本文详细阐述了在YII2中使用AJAX POST提交表单数据时遇到的CSRF验证问题,提供了解决方案,包括设置$enableCsrfValidation、采用GET方式替代、以及正确包含CSRF Token的方法,确保数据安全并保持其他验证正常进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

favicon.ico摘要:YII2中通过ajax post表单数据需要验证CSRF否则post数据是无法提交过去的。虽然有其他人提供过解决方案,但都不够完整,除了把enableCsrfValidation设为false外,其他的方法都有不小的问题。这里就给大家分享完整的ajax post提交表单数据验证不通过的解决方法。

YII2中通过ajax post表单数据需要验证CSRF否则post数据是无法提交过去的。虽然有其他人提供过解决方案,但都不够完整,除了把enableCsrfValidation设为false外,其他的方法都有不小的问题。这里就给大家分享完整的ajax post提交表单数据验证不通过的解决方法。

1、把enableCsrfValidation设为false

这种方法的目的是关闭csrf验证,出于安全考虑不建议关闭,因为一旦关闭控制器中的其他需要验证csrf的地方也不会验证了。//给控制器类添加属性

public $enableCsrfValidation = false;

或者初始化控制器的时候设置public function init(){

$this->enableCsrfValidation = false;

}

2、把ajax中的post提交数据改为get提交,同时控制器中的行为过滤控制和数据接收也都改为get.这样的话就不会影响到其他行为的csrf验证了,不过表单数据的提交同样不建议用get.

20190319_1552987235871323.jpg

3、在ajax的提交数据中把csrf验证一起提交过去,虽然网上有这个解决方法,但并不全面,遗漏了一个非常重要的参数配置,request提交验证配置//前台配置

'request' => [

'csrfParam' => '_csrf-frontend',

],

//后台配置

'request' => [

'csrfParam' => '_csrf-backend',

],

20190319_1552987474789249.jpg

虽然都是csrf验证,但前台和后台的csrf验证参数是不一样的。所以在ajax中添加提交数据的时候也是不一样的,前台提交数据验证应该用'_csrf-frontend':csrfToken

20190319_1552987734601932.jpg

如果是后台则要用'_csrf-backend':csrfToken,前提是没有修改前后台request配置。修改了就用修改后的值,只要保持ajax和配置中的验证字段一致即可。

至于是添加隐藏域还是直接在ajax中获取csrfToken都无所谓,最终的目的都是通过ajax把csrfToken post给控制器。

以上就是本文提供的ajax post数据时数据无法验证 提示400错误的解决方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值