You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:22:12