1 回答
TA贡献1812条经验 获得超5个赞
我没有指定一件事是重新加载 gridview,这不是那里的要求,但可以使用$.pjax
.
您需要注意的几件事
updateStatus
根据您的要求,您不需要任何视图来执行操作。您只需要将一些状态代码返回到您在 gridView 中用于切换输入的 ajax 调用,并刷新您的 gridview 以加载新的更新状态。
在 ajax 成功回调函数中检查状态代码是否正常,那么您应该刷新 gridview 而不是使用 render partial。
你没有更新任何内容
updateStatus
?你需要切换状态
所以将您的操作更改为以下内容
public function actionUpdateStatus()
{
try {
$status = Yii::$app->request->post('status');
$id = Yii::$app->request->post('id');
$model = Customer::findOne($id);
$model->status=$status;
if(!$model->save()){
throw new Exception(implode("\n",\yii\helpers\ArrayHelper::getColumn($model->errors,'0'));
}
return $this->asJson(['success' => true]);
} catch (Exception $e) {
return $this->asJson(['success' => false, 'message' => $e->getMessage()]);
}
}
确保已将 GridView 包装在 Pjax 开始和结束内,并将 an 添加id到 Pjax 小部件
<?php
Pjax::begin(['id'=>'pjax-container']);
echo GridView::widget([
'dataProvider' => $customers,
'columns' => [
.......
]);
Pjax::end();
?>
您对以下内容的 ajax 调用
'switchChange.bootstrapSwitch' => 'function(e) {
$.ajax({
method: "POST",
url: "'.Url::to(['update-status']).'",
dataType:'json',
data: { "status": e.currentTarget.checked, "id": e.currentTarget.name },
success:function(data){
if(data.success){
$.pjax({container: "#pjax-container"});
}else{
console.log(data.message);
}
},
error:function(res){
console.log(res.responseText);
}
});
}'
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报