1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > yii2 html form YII2中ajax通过post提交form表单数据报400错误的解决方法

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

时间:2022-01-30 14:58:22

相关推荐

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

摘要: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;

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

$this->enableCsrfValidation=false;

}

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

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

'request'=>[

'csrfParam'=>'_csrf-frontend',

],

//后台配置

'request'=>[

'csrfParam'=>'_csrf-backend',

],

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。