在 Yii 2 中发送 AJAX 发布请求后出现 400 个错误请求


400 Bad Request after sending AJAX post request in Yii 2

我想通过ajax将数据发布到某个特定的控制器,如下所示:

<script>
    var myUrl = "<?php echo Url::to(['table/edit']); ?>";
</script>
$.ajax({
            type : "POST",
            url : myUrl,
            data: {id: userID},
            success  : function(response) {
                alert("Table is editted");
            }
        });

在控制器中,我想获取这些发布的数据并做其他事情。但是当我尝试这样做时,我收到错误"400(错误请求)"。如果有人能帮忙,那就太好了!谢谢!

只需添加csrf,例如:

       <script>
         var myUrl = "<?php echo Url::to(['table/edit']); ?>";        
       </script>
       $.ajax({
            type : "POST",
            url : myUrl,
            data: {id: userID,_csrf:'<?='Yii::$app->request->csrfToken?>'},
            success  : function(response) {
                alert("Table is editted");
            }
        });

以下情况下可以抛出yii'web'BadRequestException(表示代码为 400 的 HTTP 错误):

1)无法验证您提交的数据。CSRF 验证已启用但失败。我不认为这是您的情况的原因,因为它默认启用并包含在元标记中。使用 jQuery 时,您不必手动发送它。

2)缺少必需参数。

如果您有没有默认值的参数,例如:

public function actionTest($someParam)
{
    ...
}

如果您没有通过someParam,则会引发异常。

3)请求正文中的 JSON 数据无效。

如果将 JSON 作为参数发送,并且它不是有效的 JSON。

4)收到的参数数据无效。在将参数绑定到操作期间抛出:

if ($param->isArray()) {
    $args[] = $actionParams[$name] = (array) $params[$name];
} elseif (!is_array($params[$name])) {
    $args[] = $actionParams[$name] = $params[$name];
} else {
    throw new BadRequestHttpException(Yii::t('yii', 'Invalid data received for parameter "{param}".', [
        'param' => $name,
    ]));
}

最后两个很少见面,尤其是最后一个(甚至不记得我什么时候见过它)。

这些应该是目前所有可能的情况,我通过来源进行了全球搜索以确保。