博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii2 Pjax 使用
阅读量:7079 次
发布时间:2019-06-28

本文共 2579 字,大约阅读时间需要 8 分钟。

来源:

参考:

Pjax是JQuery的插件,结合ajax和Html5的pushState技术来实现异步刷新,每次通过a标签点击和form表单提交向服务器发送一个指定的请求之后,服务器都会返回需要更新的内容,Pjax会更新老旧内容以及向浏览记录中加入一条新的url而不需要更新刷新整个页面。

Yii2 framework提供了一个Pjax widget帮助我们快速简洁的使用Pjax.
1. 引入Pjax

  1. 添加Pjax包裹住需要更新的内容部分
这部分内容需要更新

你也可以选择配置哪个链接和form表单使用Pjax,是否将新的Url添加到浏览记录,替换或者保持原样。如果Pjax没有响应,超时之后页面将会重新加载。

Yii2 Pjax Examples

Refresh

本例是一个简单的点击超链接来实现刷新时间,通过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 ]);}

Navigation

本例实现多个超链接指向不同的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提交数据

一个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

有时候我们需要禁用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分页

有一个在线的,展示了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/

你可能感兴趣的文章
Win8.1解决IE11相关兼容问题
查看>>
我的友情链接
查看>>
publish_tomcat.sh
查看>>
tomcat8启动占内存溢出
查看>>
Windows Server 2008 R2 远程桌面服务RD
查看>>
windows下编辑器编译for循环时出现的问题
查看>>
java.security.SecureRandom源码分析
查看>>
双向自动文件同步--unison
查看>>
我的友情链接
查看>>
用 Python 脚本实现对 Linux 服务器的监控
查看>>
详解Samba安装和配置文件
查看>>
我的友情链接
查看>>
Android学习笔记之文件的保存与读取
查看>>
mysql数据库详解(续二)
查看>>
我的友情链接
查看>>
通过简单设置让CACTI支持中文显示
查看>>
WAF+SLB负载不均衡案例分享
查看>>
我的友情链接
查看>>
java final关键字
查看>>
磁盘分配
查看>>