yii2 ajax的post提交出现的400错误 [ 2.0 版本 ]
第一种解决办法是关闭Csrf
public function init(){
$this->enableCsrfValidation = false;
}
第二种解决办法是在form表单中加入隐藏域
<input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">
第三种解决办法是在AJAX中加入_csrf字段
var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
type: 'POST',
url: url,
data: {_csrf:csrfToken},
success: success,
dataType: dataType
});
备注:如果你的页面没有form的话,ajax的post提交是没问题的,用ajax的post提交会自动产生_csrf
如果页面有form 尤其是有file的话 ajax的post是不可以的,必须用get。
lj19870908
注册时间:2016-04-12
最后登录:2023-11-15
在线时长:15小时32分
最后登录:2023-11-15
在线时长:15小时32分
- 粉丝6
- 金钱205
- 威望30
- 积分655
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 8 条评论
感谢楼主热心分享 解决了我的问题 谢谢
初学的时候 让我头疼的 可后来 我也这么解决的
不行的吧,我加上去都没用,还是400
怎么可能,都用过N多地方了,怎么可能不管用
在html 添加隐藏域 再用js 获取该值一起提交试试,我这样处理是可以的
@wxjh 获取了还不不管用啊 出现了404
给你点个赞
验证了,可以,感谢分享,提交的时候将_csrf 参数传入即可(我用的是js post 上传图片)
(html代码) <input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken; ?>">
(js代码) var csrfToken = $('#_csrf').val(); $('.btn-upload').upload({ url: _root_host + 'levis_admin/base/upload-for-qiniu', ext: ['image/png', 'image/jpeg'], params: 'exts[]:png,exts[]:jpg,_csrf:' + csrfToken,//todo 注意加上_csrf 参数 否则请求http 400 error:function(data) { tips.init('error', data); }, success:function(data, _this) { $('.l-img-show').find('img').attr('src', data.url+'?imageView2/2/w/200'); $('#image').val(data.key); } });
![9824GBPNV`[V7NX}%QUSBPF.png](/uploads/images/201709/13231122299_thumb.png "9824GBPNV`[V7NX}%QUSBPF.png")
ajax的post提交不管有没有form表单都需要_csrf,我用get就可以成功,post需要_csrf
感谢楼主,感谢各位好人,搞定!