我这几天一直试图解决这个问题,基本上我想尝试commetn和child评论,评论有一个名为'retrievecomment'的按钮/链接来检索子评论。
我发现pjax无法正常工作,它会让整个页面更新。
编辑:下面的代码在_list_comment.php里面,_ list_comment.php在index.php里面是ListView,所以_list_comment.php将被调用几次取决于项目数
<div class="row">
<?= $model['comment']?>
</div>
<?php Pjax::begin([
'id' => 'childCommentData-'.$comment_id,
'timeout' => 5000,
'clientOptions'=>[
'container' => '#childCommentData-' . $comment_id,
'linkSelector'=>'#retrieveComment'.$comment_id
]
]);?>
<div class="row">
<div id="selector"align="right">
<?= Html::a('Retrieve Comment', ["../../thread/index?id=" . $model['thread_id'] . "&comment_id=" . $comment_id],
['data-pjax' => '#childCommentData-'.$comment_id, 'class' => 'btn btn-default'
,'id' => 'retrieveComment' . $comment_id]) ?>
</div>
<div class="col-md-12">
<?php if(isset($retrieveChildData)){ ?>
<?= ListView::widget([
'dataProvider' => $retrieveChildData,
'options' => [
'tag' => 'div',
'class' => 'list-wrapper',
'id' => 'list-wrapper',
],
'layout' => "\n{items}\n{pager}",
'itemView' => function ($model, $key, $index, $widget) {
return $this->render('_list_child_comment',['model' => $model]);
},
'pager' => [
'firstPageLabel' => 'first',
'lastPageLabel' => 'last',
'nextPageLabel' => 'next',
'prevPageLabel' => 'previous',
'maxButtonCount' => 3,
],
]) ?>
<?php } ?>
</div>
</div>
<?php Pjax::end();?>
</div>
错误说“模型未定义”,这是pjax的外部空间。这就是我认为整个页面被刷新的原因
我还把它放在java脚本代码中
<?php $this->registerJsFile(Yii::$app->request->baseUrl.'/js/list_comment.js');
$script =<<< JS
$(document).pjax('retrieveComment' + $comment_id, '#childCommentData-' + $comment_id, { fragment: '#childCommentData-' + $comment_id });
$('#childCommentData-' + $comment_id ).on('pjax:error', function (event) {
alert('Failed to load the page');
event.preventDefault();
});
JS;
$this->registerJs($script);
?>
我一直收到警告无法加载页面。
响应标题: 请求网址:http://localhost/startUp/thread/index?id=1&comment_id=1&_pjax=%23childCommentData-1 请求方法:GET 状态代码:500内部服务器错误 远程地址:[:: 1]:80 响应标题 查看源 连接:关闭 内容长度:1387 内容类型:text / html的;字符集= UTF-8 日期:2015年12月29日星期二12:02:18 GMT 服务器:Apache / 2.4.9(Win64)PHP / 5.5.12 X-已启动方式:PHP / 5.5.12 请求标题 查看源 接受:text / html, / ; Q = 0.01 Accept-Encoding:gzip,deflate,sdch 接受语言:EN-US,EN; Q = 0.8 连接:保持活跃 内容类型:应用/ X WWW的窗体-urlencoded;字符集= UTF-8
主机:本地主机 引用者:http://localhost/startUp/thread/index?id=1 User-Agent:Mozilla / 5.0(Windows NT 6.3; WOW64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 47.0.2526.106 Safari / 537.36 X-CSRF令牌:UkwwSXdGUE4gO2MdRCMBDDENRBMkMykHGQ9XeB4uYTlnHGECGgkbPQ == X-PJAX:真 X-PJAX容器:#childCommentData-1 X-要求 - 由于:XMLHttpRequest的 查询字符串参数 查看源 查看URL编码 ID:1 COMMENT_ID:1 _pjax:#childCommentData-1
答案 0 :(得分:0)
这很糟糕:
<?= Html::a('Retrieve Comment', ["../../thread/index?id=" .
$model['thread_id']. "&comment_id=" . $comment_id],
['data-pjax' => '#childCommentData-'.$comment_id, 'class' => 'btn btn default','id' => 'retrieveComment' . $comment_id])
?>
方法是:
<?php
$url = Html::a('Retrieve Comment', ["/module/controller/index",[
"id"=> $model['thread_id'],
"comment" => $model["comment"]
]);
echo $url;
?>
在控制器/操作中,您可以添加pjax标头以生成url:
Yii::$app->response->headers->set('X-PJAX-URL', Url::toRoute(["/module/controller/action", "id" => $model->id , 'comment'=> $comment->id]) );
我向yii写了一个behaivor,以自动生成此标头X-PAJAX-URL: https://github.com/yiiforces/yii2-pjax-url-behavior
在/ controller / action中使用时,仅将其添加到控制器行为中
public function behaviors()
{
return [
'pjax-url' => [
'class' => 'yiiforces\pjaxUrlBehaivor\PjaxUrlBehaivor',
'actions' => ['index'],
'extraParams' => ['extra', 'lorem ipsum'] // incluse you can add more params to url
],
];
}