php7 tutorial이 칼럼에서는 메시지 보드 개발의 Ajax 페이징을 소개합니다
권장(무료): php7 tutorial
기본 페이지의 지원으로 사용자를 개선하고 싶습니다. 페이지 경험이 있는 경우 비동기 데이터 로딩이 현재 이를 처리하는 가장 좋은 방법입니다. Ajax 페이징은 연습을 위한 최고의 응용 시나리오입니다. 사용된 지식 포인트는 Friends의 마지막 수업인 PHP7 메시지 보드 개발(Ajax 비동기 제출)에서 어느 정도 소개되었습니다. 이전 섹션의 내용을 읽어보세요.
gotopage(){}
함수gotopage
입니다. gotopage(){}
函数JavaScript具有基于函数的作用域,只要定义了,当前页面的是全局可用的,标识就是gotopage
。GET
方式,ajax.php
是异步请求服务端需要处理的逻辑文件,接收用户翻页请求,返回响应页数的数据即可(当然其他格式的内容就行,比如JSON,这里就不讲解)。innerHTML
在指定的页面区域打印翻页数据<ul id="list_box"><u/>
,这里的样式结构是要在ul标签内输出内容,所以用JS选择器document.getElementById("list_box")
,获取ul标签的对象,然后运用其中的innerHTML
属性赋值内容,完成我们想要的结果document.getElementById("list_box").innerHTML = '服务器返回的数据';
for
的运用,遍历所有页码并标识当前页码用选择器获取所有的页面对象var pageno = document.getElementsByClassName('pageno');
计算总页码数量pageno.length
for
循环遍历直到匹配到当前用户请求的page
页码数即当前页,匹配成功就给当前页数添加样式(标识当前请求成功的页数)。
本教程基于老友记之PHP7留言板开发(分页)内容上改动。
list.php
<?php include 'config.php'; $page = !empty($_GET['page'])?intval($_GET['page']):1; $keyword = !empty($_GET['keyword'])?strip_tags($_GET['keyword']):''; $pagesize = 6; // 统计总记录数,便于计算出总页数 if(!empty($keyword)){ $sql = "SELECT * FROM feedback WHERE name LIKE '%{$keyword}%'"; }else{ $sql = "SELECT * FROM feedback"; } $result = mysqli_query($mysqli, $sql); $total = mysqli_affected_rows($mysqli); $total_page = ceil($total/$pagesize); // 进一法取整获取总页数 // 开始分页查询,根据page计算偏移量 $offset = ($page - 1) * $pagesize; if(!empty($keyword)){ $sql = "SELECT * FROM feedback WHERE name LIKE '%{$keyword}%' LIMIT {$offset}, {$pagesize}"; }else{ $sql = "SELECT * FROM feedback LIMIT {$offset}, {$pagesize}"; } $result = mysqli_query($mysqli, $sql); $lists = array(); while($rows = mysqli_fetch_array($result)){ $lists[] = $rows; } ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>异步翻页+列表带搜索功能_留言板_科科分享</title> <!-- 2.新建css样式文件并根据效果图编写css代码 --> <link rel="stylesheet" href="feedback.css"> <script> function gotopage(page, keyword){ if(page<0){ page = 1; } // 创建 XMLHttpRequest 对象 var ajax, url; if(window.XMLHttpRequest){ ajax = new XMLHttpRequest(); }else{ // 兼容Internet Explorer(IE5 和 IE6)使用 ActiveX 对象 ajax = new ActiveXObject("Microsoft.XMLHTTP"); } url = 'page.php?page=' + page + '&keyword=' + keyword; ajax.open('GET', url, true); ajax.send(); ajax.onreadystatechange = function(){ // 获取服务器响应状态码 if(ajax.readyState == 4 && ajax.status==200){ // 获取服务器返回的响应返回的数据 var retdata = ajax.responseText; // 如果返回的时候不为空的时候,就输出 if(retdata){ // 这里是将异步请求的数据 在指定区域(list_box)展示给用户看 document.getElementById("list_box").innerHTML = retdata; // 最后将页面中的定位当前分页数,告诉用户当前在哪个分页 // 这里相对逻辑会复杂点,慢慢领会 // 第一步获取所有分页数的集合 var pageno = document.getElementsByClassName('pageno'); // 这里用到for循环遍历 从多个分页的集合获取当前用户点击的那个分页链接并添加样式active for(var i=0; i<pageno.length; i++){ pageno[i].className = 'pageno'; // parseInt(i)+1意思是当前分页, if(parseInt(i)+1 == page){ pageno[i].className = 'pageno active'; } } } } } } </script> </head> <body> <!-- 工作区,呈现给用户看的 --> <!-- 1.开始搭建脚手架 --> <p class="container_box"> <p class="up"> <h3 class="title">留言板</h3> <h5 class="subtitle">LIST</h5> </p> <p class="down list"> <p class="search"> <form action="list.php"> 关键词:<input type='text' name="keyword" value="<?php echo $keyword?>" /> <input type="submit" value="去搜索"> </form> </p> <ul id="list_box"> <?php foreach($lists as $item){ ?> <li>姓名:<?php echo $item['name']?> 联系方式:<?php echo $item['contact']?> 内容:<?php echo $item['content']?></li> <?php } ?> </ul> <p class="pages"> <ul> <?php for($p = 1; $p<=$total_page; $p++){ ?> <li class="pageno"><a href="javascript:gotopage(<?php echo $p?>, '<?php echo $keyword?>');"><?php echo $p?></a></li> <?php } ?> </ul> </p> </p> </p> </body> </html
page.php
GET
메서드에 주의하는 것입니다. >ajax.php 비동기 요청 서버에서 처리해야 하는 논리 파일입니다. 사용자의 페이지 넘김 요청을 수신하고 응답 페이지 수(물론 내용은 다음과 같습니다)를 반환하면 됩니다. JSON과 같은 다른 형식은 여기서 설명하지 않습니다.) 3. JS 인쇄 데이터 innerHTML
지정된 페이지 영역의 페이지 넘김 데이터 인쇄 위 내용은 PHP7 메시지 보드 개발의 Ajax 페이징의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!에서 스타일 구조는 ul 태그 내의 콘텐츠를 출력하는 것이므로 JS 선택기
document.getElementById("list_box")
를 사용하여 ul 태그 객체를 얻은 다음 innerHTML
속성을 사용하여 우리가 원하는 결과를 얻기 위해 콘텐츠를 할당합니다. document.getElementById("list_box").innerHTML = '서버에서 반환된 데이터'; code>
🎜4. JS 루프 for
를 사용하여 모든 페이지 번호를 탐색하고 현재 페이지 번호 식별🎜선택기 사용 모든 페이지 객체를 얻으려면var pageno = document.getElementsByClassName('pageno');
🎜전체 페이지 번호 계산pageno.length
🎜현재 사용자 요청이 일치할 때까지 반복합니다.
페이지
페이지 번호는 현재 페이지입니다. 일치에 성공하면 현재 페이지 번호에 스타일이 추가됩니다(현재 페이지 번호를 식별함). 요청이 성공했습니다). 🎜🎜본 튜토리얼은 프렌즈의 PHP7 게시판 개발(페이지네이션) 컨텐츠를 기반으로 제작되었습니다. 🎜
🎜HTML 코드 list.php
🎜<?php
include 'config.php';
$page = !empty($_GET['page'])? intval($_GET['page']):1;
$keyword = !empty($_GET['keyword'])?addslashes(strip_tags($_GET['keyword'])):'';
$pagesize = 6;
// 开始分页查询,根据page计算偏移量
$offset = ($page - 1) * $pagesize;
if(!empty($keyword)){
$sql = "SELECT * FROM feedback WHERE name LIKE '%{$keyword}%' LIMIT {$offset}, {$pagesize}";
}else{
$sql = "SELECT * FROM feedback WHERE 1 LIMIT {$offset}, {$pagesize}";
}
$result = mysqli_query($mysqli, $sql);
$lists = array();
$list = '';
while($rows = mysqli_fetch_array($result)){
$list .= "<li>姓名:". $rows['name']." 联系方式:". $rows['contact']." 内容:".$rows['content']."</li>";
}
echo $list;
exit;
🎜비동기 페이징 코드 page.php
🎜rrreee🎜Summary🎜🎜이 섹션은 초보자에게 상대적으로 어렵고 배운 지식 포인트는 이전에 배운 내용을 요약한 것입니다. 시작하기 전에 아이디어를 명확히 하고 단계별로 구현해야 합니다. 🎜생각하는 것이 매우 중요하다는 점을 기억하십시오. 학습만으로는 충분하지 않으며 다른 비슷한 요구 사항이 있을 때 숙달할 수 있어야 합니다. 🎜드디어 코딩을 시작할 시간입니다! ~🎜