使用jQuery Post Ajax访问Yii2时出现Bad Request #400错误求助
解决jQuery POST请求Yii2后端返回400 Bad Request的问题
常见原因及修复方案
1. CSRF 验证失败(最常见)
Yii2默认开启CSRF验证机制,所有POST请求必须携带合法的CSRF令牌,否则会直接返回400错误。
修复方法:
- 方案一:在请求参数中直接携带CSRF令牌
从页面meta标签获取令牌后,加入POST数据:var bookingId = 123; var csrfToken = $('meta[name="csrf-token"]').attr('content'); $.post('<?=Url::base(true)?>/site/requestedc', { 'booking_id': bookingId, '_csrf': csrfToken }, function(response){ alert(response); }, 'json'); - 方案二:全局配置jQuery自动携带CSRF令牌
在页面初始化时添加以下代码,后续所有AJAX请求都会自动带上CSRF头:$.ajaxSetup({ headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') } });
2. 路由与请求方法限制
检查控制器的行为配置,确保requestedc动作允许POST请求:
public function behaviors() { $behaviors = parent::behaviors(); $behaviors['verbs'] = [ 'class' => \yii\filters\VerbFilter::class, 'actions' => [ 'requestedc' => ['post'], // 明确允许POST请求 ], ]; return $behaviors; }
同时确认site/requestedc路由在Yii2的路由规则中可正常访问。
3. 后端响应格式规范
当前后端直接echo JSON的写法不符合Yii2规范,可能导致响应头异常,建议改用框架自带的响应方法:
public function actionRequestedc() { Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return "asd"; }
该写法会自动设置正确的Content-Type响应头,避免前端解析JSON时出现潜在问题。
内容的提问来源于stack exchange,提问作者Henry Gunawan
相关产品推荐
相关产品推荐

