yii2在发布请求后呈现

时间:2015-07-07 15:03:55

标签: javascript post view yii2 render

我有一个带有checkboxcolumn和google-map(2amigos)的gridview视图。用户通过选择gridview中的相应项目来选择要在地图中显示的机器。 html按钮将选定的密钥提交给控制器。遵循控制器代码(dataProvider通过post-request更新):

plusOne()

这是html-button的js脚本:

//some code before render   
$dataProvider = new ActiveDataProvider(['query'=>$query, 'pagination'=>false]);
return $this->render('locating', [
    'model' => $model,
    'searchModel' => $searchModel,
    'dataProvider1' => $dataProvider1,
    'dataProvider' => $dataProvider,
    ]);
}

问题是,对于post请求,php-render命令的结果被写为html-string到post-response,但是视图没有被重新渲染。如果我使用activeForm而不是gridview(选择机器)和提交按钮,页面会按原样重新渲染(但这种方式对我不起作用,因为我需要gridview过滤和排序)。我可以做什么,使用后请求重新呈现地图(或视图)?

3 个答案:

答案 0 :(得分:1)

尝试使用renderAjax方法在通过ajax请求时呈现视图。我假设您使用actionLocating呈现页面获取请求和ajax的视图。因此,在控制器中调用 render 之前,请检查这是否是ajax请求:

$renderMethod = Yii::$app->request->isAjax ? 'renderAjax' : 'render';

return $this->$renderMethod('locating', $viewParams);

答案 1 :(得分:0)

sigma

答案 2 :(得分:0)

你可以在你的基本控制器上创建一些功能,以确保它是否呈现为ajax,代码看起来像这样。

protected function renderIsAjax($view, $params = [])
{
    if (Yii::$app->request->isAjax) {
        return $this->renderAjax($view, $params);
    } else {
        return $this->render($view, $params);
}

然后在你的控制器中调用该方法

return $this->renderIsAjax('locating', [
    'model' => $model,
    'searchModel' => $searchModel,
    'dataProvider1' => $dataProvider1,
    'dataProvider' => $dataProvider,
]);