我想通过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(错误请求)”。 如果有人可以帮助它会很棒!谢谢!
答案 0 :(得分:1)
yii\web\BadRequestException
(表示代码为400的HTTP错误)可能会在以下情况下抛出:
1) 无法验证您的数据提交。 CSRF验证已启用且失败。我不认为这是你的理由,因为它默认启用并包含在meta标签中。使用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,
]));
}
最后两个很少见面,尤其是最后一个(当我遇到它时,甚至不记得单次)。
这些应该是目前所有可能的情况,我通过消息来源进行全球搜索只是为了确保。
答案 1 :(得分:1)
只需添加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");
}
});