这400 Bad Request
是因为没有发送请求,每当您使用提交页面或 ajax 请求时,csrf-token
为了防止 Yii 进行跨站点攻击,如果您创建一个,那么它会使用令牌值自动创建一个输入。POST
ActiveForm
您没有添加用于 ajax 调用的代码,因此不清楚您是仅将其用于一个字段还是整个表单,因此我只建议相关部分。
您需要发送 csrf-token,您可以通过 javascript 使用yii.js
和调用这两种方法来获取它
yii.getCsrfParam()
获取token的参数名称
yii.getCsrfToken()
获取 csrf-token 的 token 或实际值
该csrfParam
名称在您的内部配置frontend/config.php
或config/web.php
取决于您在request
组件下使用的应用程序(高级/基本),如下所示
'components'=>[
......
......
'request' => [
'csrfParam' => '_csrf-frontend',
],
......
......
]
因此,您需要做的是将请求方法从POST
to更改为GET
并通过查询字符串发送数据,或者使用以下方式发送POST
请求。
Note: You should change the URL and add the csrf data into your existing data that you are sending with the request
let data={};
data[yii.getCsrfParam()]=yii.getCsrfToken();
$.ajax(
{
method:"POST",
url:"/site/test",
data:data,
success:function(data) {
console.log(data);
},
error:function(jqXHR,textStatus,errorThrown) {
console.log(jqXHR,textStatus,errorThrown);
}
}
);
如果您在下面的代码中有一个test
动作,那么上面的 ajax 调用应该向您显示控制台内的数组,其中 csrf 参数和令牌值为.SiteController
$_POST
key=>value
public function actionTest()
{
print_r($_POST);
}