走在 php 的路上:Pjax整理
首先什么是pjax,官方解释自己搜一下,对于现在的我来说,pjax 就是将我们平常写的 ajax 加以优化了一下。
优点:
1、一样的局部刷新,但是 pjax 可以更新 url
2、带页码的内容使用 pjax,在退后时可到上一个访问页面
3、。。。等发现了再来补充
缺点:
1、不支持一些低版本的浏览器(如IE系列)
2、。。。等发现了再来补充
注:我所使用的是Yii 框架下的 pjax。
记录两个经常使用到的函数:
使用 pjax 的链接点击后,加载时的函数
$(document).on('pjax:send', function() {
// 函数内容
}
使用 pjax 的链接点击后,加载完成后的函数
$(document).on('pjax:complete', function() {
// 函数内容
}
还有其他参数:
我就不一一写啦,推荐去看pjax使用小结,写的很详细
遇到的问题:
1、加载后依然会刷新页面,但点击两三次之后又恢复正常
原因:查了一下,原来是因为 Yii 自带的 pjax 组件设置超时时间是1s,超过了 1s 就会像我们 ajax 请求一样,页面重新加载。
解决:在调用 pjax 时,传入参数 enablePushState 和 timeout,我在下面粘贴了源码给的参数解释。
/**
* @var boolean whether to enable push state.
*/
/**
* @var integer pjax timeout setting (in milliseconds). This timeout is used when making AJAX requests.
* Use a bigger number if your server is slow. If the server does not respond within the timeout,
* a full page load will be triggered.
*/
<?php Pjax::begin(['enablePushState' => false,'timeout' =>5000]); ?>
<?= ListView::widget([
'dataProvider' => $dataProvider,
'itemOptions' => ['class' => 'waterfull-item'],
'summary' => '',
'itemView' => function ($model, $key, $index, $widget) {
return $this->render('_picture',[
'model'=>$model,
'key'=>$key,
'index'=>$index,
'widget'=>$widget
]);
},
]) ?>
<?php Pjax::end();?>
其他的问题,遇到了,会慢慢补充上去