我想通过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,
]));
}
最后两个很少见面,尤其是最后一个(甚至不记得我什么时候见过它)。
这些应该是目前所有可能的情况,我通过来源进行了全球搜索以确保。