我的表单元素
<?= $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);
}
我得到404回复,没有身份证明作为投诉。 当我将ajax .post更改为.get时,我得到400响应
由于
答案 0 :(得分:0)
当您创建actionGetbatchdata($id) {}
之类的函数时,您必须将id
添加为GET参数(通过将其添加到网址)。因此,当您使用$.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()
包含值,并且操作中的代码会返回有效结果。
答案 1 :(得分:0)
检查控制器行为方法并确保在那里列出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'],
],
],
];
}
Makre肯定会使用驼峰外壳进行控制器操作
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);
});
']); ?>