ajax分頁是項目中常會遇到的需求,以前老楊寫過一個,比較復雜。
##效果
老楊重新寫了實現了一下,效果如下:

在隨時示列里,大家可以看到,然后我們點新創打開,可以看到帶地址的。

點第二頁

地址沒有變化。
而切換為普通分頁后,地址是變的

## 關鍵代碼
~~~
public function index($p = 1){
$use_ajax = I('get.use_ajax', cookie('use_ajax'));
cookie('use_ajax', $use_ajax);
$this->assign('use_ajax', $use_ajax);
$num_perpage = 5;
$article = D('page');
$list = $article->order('id desc')->page($p, $num_perpage)->select();
$count = $article->count();
$Page = new \Think\Page($count, $num_perpage);
$Page->setConfig('theme', '%UP_PAGE% %LINK_PAGE% %DOWN_PAGE%');
$show = $Page->show();
$this->assign("list", $list);
$this->assign('page', $show);
if(IS_AJAX){
//調用indexajax.html模板渲染數據
$html = $this->fetch('index_ajax');
//ajax輸出數據
$this->ajaxReturn($html);
}
//第一頁時使用默認的index.html模板渲染數據
$this->display();
}
~~~
其實就是 IS_AJAX那個分支的時候選擇返回分頁后的數據渲染 不包括公共部分的。
index.html:
~~~
<table cellpadding=3 cellspacing=5>
<volist name="list" id="vo">
<tr>
<td style="border-bottom:1px solid silver;">
<span style="color:gray">[ {$vo.create_at} ]</span> {$vo.title}
</td>
</tr>
</volist>
<tr></tr>
</table>
<div class="result page" id="page">{$page}</div>
<?php if (cookie('use_ajax')): ?>
<script>
$(function(){
$("#page a").on('click',function(){
var pageObj = this;
var url = pageObj.href;
$.get(url,{},function(data){
$("#pagenavlist").html(data);
},'json');
return false;
});
});
</script>
<?php endif ?>
~~~
index.html
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ThinkPHP示例: ajax分頁操作</title>
<base href="/">
<script type="text/javascript" src="//cdn.bootcss.com/jquery/2.1.4/jquery.min.js"></script>
<style type="text/css">
*{ padding: 0; margin: 0;font-size:16px; font-family: "微軟雅黑"}
body{ background: #fff; color: #333;}
h2{font-size:36px}
div.result{border:1px solid #d4d4d4; background:#FFC;color:#393939; padding:8px 10px;float:auto; width:450px;margin:2px}
a{text-decoration:none; color:gray;}
a:hover{color:#F60;}
div.page{border:1px solid #d4d4d4; background:#333;color:white; padding:5px 15px;float:auto; width:450px;margin:2px;text-align:right}
</style>
</head>
<body>
<h2>ThinkPHP示例:ajax分頁操作</h2>
<div class="result">
分頁模式:
<select name="use_ajax" id="use_ajax">
<option value="1" href="{:U('Page/index', 'use_ajax=1')}" <eq name="use_ajax" value="1">selected</eq>>Ajax分頁</option>
<option value="0" href="{:U('Page/index', 'use_ajax=0')}" <eq name="use_ajax" value="0">selected</eq>>普通分頁</option>
</select>
</div>
<div id="pagenavlist">
<include file="index_ajax" />
</div>
<script>
$(function(){
$('#use_ajax').on('change', function(){
location.href = $('option:selected', this).attr('href');
});
})
</script>
</body>
</html>
~~~
其實
就是 ajax 頁面里通過cookie 判斷是否有ajax分頁的js有就ajax分頁。
qjax分頁的原理是將原來分頁 頁碼列表的a點擊事件的跳轉替換為jquery ajax請求,請求完替換固定顯示內容區域。就是下面這段js
~~~
$("#page a").on('click',function(){
var pageObj = this;
var url = pageObj.href;
$.get(url,{},function(data){
$("#pagenavlist").html(data);
},'json');
return false;
});
~~~
- 序
- 前言
- 內容簡介
- 目錄
- 基礎知識
- 起步
- 控制器
- 模型
- 模板
- 命名空間
- 進階知識
- 路由
- 配置
- 緩存
- 權限
- 擴展
- 國際化
- 安全
- 單元測試
- 拿來主義
- 調試方法
- 調試的步驟
- 調試工具
- 顯示trace信息
- 開啟調試和關閉調試的區別
- netbeans+xdebug
- Socketlog
- PHP常見錯誤
- 小黃鴨調試法,每個程序員都要知道的
- 應用場景
- 第三方登錄
- 圖片處理
- 博客
- SAE
- REST實踐
- Cli
- ajax分頁
- barcode條形碼
- excel
- 發郵件
- 漢字轉全拼和首字母,支持帶聲調
- 中文分詞
- 瀏覽器useragent解析
- freelog項目實戰
- 需求分析
- 數據庫設計
- 編碼實踐
- 前端實現
- rest接口
- 文章發布
- 文件上傳
- 視頻播放
- 音樂播放
- 圖片幻燈片展示
- 注冊和登錄
- 個人資料更新
- 第三方登錄的使用
- 后臺
- 微信的開發
- 首頁及個人主頁
- 列表
- 歸檔
- 搜索
- 分頁
- 總結經驗
- 自我提升
- 進行小項目的鍛煉
- 對現有輪子的重構和移植
- 寫技術博客
- 制作視頻教程
- 學習PHP的知識和新特性
- 和同行直接溝通、交流
- 學好英語,走向國際
- 如何參與
- 瀏覽官網和極思維還有看云
- 回答ThinkPHP新手的問題
- 嘗試發現ThinkPHP的bug,告訴官方人員或者push request
- 開發能提高效率的ThinkPHP工具
- 嘗試翻譯官方文檔
- 幫新手入門
- 創造基于ThinkPHP的產品,進行連帶推廣
- 展望未來
- OneThink
- ThinkPHP4
- 附錄