我有一个带有复选框列的 GridView 和一个谷歌地图(2amigos)的 View 。用户通过选择 GridView 中的相应项目来选择要在 map 中显示的机器。 html 按钮将选定的键提交给 Controller 。遵循 Controller 代码(dataProvider 通过后请求更新):
//some code before render
$dataProvider = new ActiveDataProvider(['query'=>$query, 'pagination'=>false]);
return $this->render('locating', [
'model' => $model,
'searchModel' => $searchModel,
'dataProvider1' => $dataProvider1,
'dataProvider' => $dataProvider,
]);
}
这是 html 按钮的 js 脚本:
$('#showButton').click(function(){
var keys = $('#w0').yiiGridView('getSelectedRows');
$.post("http://localhost:8080/eddb1/frontend/web/index.php?r=tracking/locating",
{'keylist': keys},
function(data){
console.log(data);
});
});
问题是,通过 post 请求,php-render 命令的结果会作为 html 字符串写入 post-response,但 View 不会重新渲染。如果我使用 activeForm 而不是 gridview (来选择机器)和提交按钮执行相同的操作,页面将按应有的方式重新呈现(但这种方式对我不起作用,因为我需要带有过滤器的 gridview 和排序)。我该怎么做才能通过后期请求重新渲染 map (或 View )?
最佳答案
尝试使用renderAjax当通过 ajax 请求时呈现 View 的方法。我假设您使用 actionLocating
来呈现页面获取请求和 ajax 的 View 。因此,在 Controller 中调用 render 之前,请检查这是否是 ajax 请求:
$renderMethod = Yii::$app->request->isAjax ? 'renderAjax' : 'render';
return $this->$renderMethod('locating', $viewParams);
关于javascript - yii2 在请求后渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31272381/