本文共 2579 字,大约阅读时间需要 8 分钟。
来源:
参考:Pjax是JQuery的插件,结合ajax和Html5的pushState技术来实现异步刷新,每次通过a标签点击和form表单提交向服务器发送一个指定的请求之后,服务器都会返回需要更新的内容,Pjax会更新老旧内容以及向浏览记录中加入一条新的url而不需要更新刷新整个页面。
Yii2 framework提供了一个Pjax widget帮助我们快速简洁的使用Pjax. 1. 引入Pjax这部分内容需要更新
你也可以选择配置哪个链接和form表单使用Pjax,是否将新的Url添加到浏览记录,替换或者保持原样。如果Pjax没有响应,超时之后页面将会重新加载。
本例是一个简单的点击超链接来实现刷新时间,通过Pjax widget实现异步刷新。这里有一个在线的示例:
'btn btn-primary'])?>刷新的时间为:
所有被包裹在Pjax widget中的a标签和form都会发送一个Pjax请求.
控制器渲染和提供数据给页面public function actionIndex(){ $time = date('Y-m-d H:i:s', time()); return $this->render('index', [ 'time' => $time ]);}
本例实现多个超链接指向不同的Controller Actions,返回不同的内容,在线示例
'btn btn-primary'])?> 'btn btn-primary'])?>显示的数据为:
控制器中代码为:
public function actionDate(){ return $this->render('time-date', [ 'response' => date('Y-m-d') ]);}public function actionTime(){ return $this->render('time-date', [ 'response' => date('H:i:s') ]);}
一个Form表单提交数据的在线示例:,示例中Pjax包裹一个Form表单,里边有一个输入框和提交按钮以及下边的响应数据。
- 注意:Form表单必须添加 data-pjax''])?>返回加密数据:
控制器中提交代码
public function actionSubmit(){ $security = new Security(); $name = Yii::$app->request->post('name'); $hash = ''; if(!is_null($name)){ $hash = $security->generatePasswordHash($name); } return $this->render('submit', [ 'hash' => $hash ]);}
由于表单是POST请求,pushState没有触发,地址栏Url也不会更新.
有时候我们需要禁用pushState,更新数据的同时,保持Url不变,在线示例,一个简单的投票示例代码,Pjax配置参数enablePushState需设置为false
false]);?> 'btn btn-primary'])?> 'btn btn-primary'])?>投票数为: session->get('vote', 0)?>
控制器部分投票逻辑
public function actionVote(){ return $this->render('vote');}public function actionUpvote(){ $vote = Yii::$app->session->get('vote', 0); Yii::$app->session->set('vote', ++$vote); return $this->render('vote');}public function actionDownvote(){ $vote = Yii::$app->session->get('vote', 0); Yii::$app->session->set('vote', --$vote); return $this->render('vote');}
有一个在线的,展示了GridView结合Pjax使排序,过滤,分页异步加载.
$dataProvider, 'columns' => [ 'name' ]])?>
控制器中提供数据:
public function actionGrid(){ $models = [ ['name' => 123] ]; $dataProvider = new ArrayDataProvider([ 'allModels' => $models, 'pagination' => [ 'pageSize' => 3 ] ]); return $this->render('grid', [ 'dataProvider' => $dataProvider ]);}
好的建议,请告知我。
转载地址:http://tztml.baihongyu.com/