Yii2 ajax 请求返回错误 404 和 400
Yii2 ajax request returning Error 404 and 400
我的表单元素
<?= $form->field($model, 'batch_id')->dropDownList($BatchOptions, ['prompt'=>'Select Batch','onchange'=>'
$.post( "'.Url::toRoute('week/getbatchdata').'", { id: $(this).val() } )
.done(function( data ) {
var BatchData = $.parseJSON(data);
console.log(BatchData);
});
']); ?>
我的控制器
public function actionGetbatchdata($id)
{
$model = $this->findModel($id);
$batch = $model->getBatch();
return \yii\helpers\Json::encode($batch);
}
我收到一个没有 id 的 404 响应作为投诉。
当我将 ajax .post 更改为 .get 时,我收到 400 响应
谢谢
当您创建像 actionGetbatchdata($id) {}
这样的函数时,您必须将 id
添加为 GET 参数(通过将其添加到 url)。因此,当您使用 $.post()
时,您将 id
作为 POST 参数发送。
我建议进行以下更改:
public function actionGetbatchdata($id)
{
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$model = $this->findModel($id);
return $model->getBatch();
}
通过将响应格式设置为 json 以消除 json 编码服务器端然后 json 再次解码客户端的需要。
Js 变化:
$.get(
"' . Url::toRoute('week/getbatchdata') . '",
{ id: $(this).val() }
)
.done(function( data ) {
console.log(data);
}
请确保 $(this).val()
包含一个值并且您的操作中的代码 returns 有效结果。
检查您的控制器行为方法并确保其中列出了 get-batch-data
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['get-batch-data'],
'rules' => [
[
'actions' => ['get-batch-data'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
确保控制器操作使用驼峰式大小写
public function actionGetBatchData()
{
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$id = Yii::$app->request->post('id');
$model = $this->findModel($id);
return $model->getBatch();
}
您的表单元素
<?= $form->field($model, 'batch_id')->dropDownList($BatchOptions, ['prompt'=>'Select Batch','onchange'=>'
$.post( "'.Url::toRoute('week/getBatchData').'", { id: $(this).val() } )
.done(function( data ) {
var BatchData = $.parseJSON(data);
console.log(BatchData);
});
']); ?>
我的表单元素
<?= $form->field($model, 'batch_id')->dropDownList($BatchOptions, ['prompt'=>'Select Batch','onchange'=>'
$.post( "'.Url::toRoute('week/getbatchdata').'", { id: $(this).val() } )
.done(function( data ) {
var BatchData = $.parseJSON(data);
console.log(BatchData);
});
']); ?>
我的控制器
public function actionGetbatchdata($id)
{
$model = $this->findModel($id);
$batch = $model->getBatch();
return \yii\helpers\Json::encode($batch);
}
我收到一个没有 id 的 404 响应作为投诉。 当我将 ajax .post 更改为 .get 时,我收到 400 响应
谢谢
当您创建像 actionGetbatchdata($id) {}
这样的函数时,您必须将 id
添加为 GET 参数(通过将其添加到 url)。因此,当您使用 $.post()
时,您将 id
作为 POST 参数发送。
我建议进行以下更改:
public function actionGetbatchdata($id)
{
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$model = $this->findModel($id);
return $model->getBatch();
}
通过将响应格式设置为 json 以消除 json 编码服务器端然后 json 再次解码客户端的需要。 Js 变化:
$.get(
"' . Url::toRoute('week/getbatchdata') . '",
{ id: $(this).val() }
)
.done(function( data ) {
console.log(data);
}
请确保 $(this).val()
包含一个值并且您的操作中的代码 returns 有效结果。
检查您的控制器行为方法并确保其中列出了 get-batch-data
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['get-batch-data'],
'rules' => [
[
'actions' => ['get-batch-data'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
确保控制器操作使用驼峰式大小写
public function actionGetBatchData()
{
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$id = Yii::$app->request->post('id');
$model = $this->findModel($id);
return $model->getBatch();
}
您的表单元素
<?= $form->field($model, 'batch_id')->dropDownList($BatchOptions, ['prompt'=>'Select Batch','onchange'=>'
$.post( "'.Url::toRoute('week/getBatchData').'", { id: $(this).val() } )
.done(function( data ) {
var BatchData = $.parseJSON(data);
console.log(BatchData);
});
']); ?>