yii2 和 PHP 的新手,在这里遇到了问题。
基于这篇文章和这篇文章,我尝试重新创建 AJAX 调用。
现在,使用 Kartik SwitchInput 小部件,我至少尝试将值输入控制器,然后将其返回到索引页面上的另一个位置。
这是视图中的内容
...
<?= GridView::widget([
'dataProvider' => $customers,
'columns' => [
...
[
'label' => 'Status',
'format' => 'raw',
'attribute' => 'status',
'value' => function($models){
return SwitchInput::widget([
'name' => $models->id,
'value' => $models->status,
'pluginEvents' => [
'switchChange.bootstrapSwitch' => 'function(e) {
$.ajax({
method: "POST",
url: "'.Url::to(['update-status']).'",
data: { "status": e.currentTarget.checked, "id": e.currentTarget.name },
error:function(res){
console.log(res.responseText);
}
})
console.log(`${e.currentTarget.checked} ${e.currentTarget.name}`);
}'
]
...
这是控制器:
class CustomerController extends Controller{
public function actionIndex(){
$customers = new ActiveDataProvider([
'query' => Customer::find()
]);
$models = $customers->getModels();
return $this->render('index', [
'customers' => $customers,
'models' => $models
]);
}
public function actionUpdateStatus(){
$status = Yii::$app->request->post('status');
$id = Yii::$app->request->post('id');
return $this->renderPartial('index', [
'status' => $status,
'id' => $id
]);
}
}
每当我拨动开关时,它都会返回 500 内部错误。Console.logging 它显示:$customers 未定义。
据我所知,每当我调用 actionUpdateStatus 时,Yii 都会完全重新呈现视图,并尝试找到不在 UpdateStatus 中的 $customers。
那么,如何将开关数据分别返回到同一视图中呢?
ABOUTYOU