zoukankan      html  css  js  c++  java
  • Ajax通信控制模式之预先获取

    思想:合理假设,预先获取

    实例:页面与载入示例(Ajax的文章分页)

    代码如下:

    JavaScript代码:

     1 /**
     2  * jQuery改写
     3  */
     4 /*全局变量*/
     5 var iCurPage = -1;            //当前页
     6 var iWaitTime = 5000;        //等待时间5s
     7 var iNextPageToLoad = -1;    //下一个要下载的页
     8 $(document).ready(function() {
     9     //获取当前页码int
    10     if (location.href.indexOf("page=") > -1) {
    11         var sQueryString = location.search.substring(1);            //获取查询字符串
    12         //获取等号后的页码
    13         iCurPage = parseInt(sQueryString.substring(sQueryString.indexOf("=") + 1), 10);
    14     }else {
    15         iCurPage = 1;        //默认第一页
    16     }
    17     
    18     //等待获取的页码
    19     iNextPageToLoad = iCurPage + 1;
    20     //查找所有属性id以"aPage"开头的a,并重写clic事件
    21     $("a[id^='aPage']").click(function(event) {
    22         var sPage = this.id.substring(5);        //获取链接id属性最后的数字
    23         showPage(sPage);                        //当指定的页码隐藏存在时,显示它否者直接链接到指定的页码
    24         event.preventDefault();                    //阻止默认的行为
    25     });
    26     setTimeout(loadNextPage, iWaitTime);
    27 })
    28 
    29 /**
    30  * 显示指定的页
    31  * 在url上有两种现象(根据是否已经从服务器获取)
    32  */
    33 function showPage(sPage) {
    34     if ($("#divPage"+sPage).size()) {
    35         //所需的文章部分已经存在
    36         $("#divPage"+sPage).show().siblings("div[id^='divPage']").hide();
    37         $("a#aPage"+sPage).addClass("current").siblings().removeClass("current");
    38     }else {
    39         location.href = getURLForPage(parseInt(sPage));
    40     }
    41 }
    42 /**
    43  * ajax加载下一页
    44  * 从后台定时获取剩余文章的内容
    45  */
    46 function loadNextPage() {
    47     
    48     if (iNextPageToLoad <= iPageCount) {
    49         var url = getURLForPage(iNextPageToLoad)+"&dataOnly=true";                //改变页码处
    50         $.get(url, saveResult);                    //get方式获取指定页码内容
    51     } 
    52     
    53 }
    54 /**
    55  * ajax显示从服务器端获取的数据
    56  * @param {String} data
    57  * @param {String} statusText
    58  * @param {XHR} jqXHR
    59  */
    60 function saveResult(data, statusText, jqXHR) {
    61     if (statusText == 'success') {
    62         //从服务器获取数据成功, 处理数据
    63         //$("#loadArea").html(jqXHR.responseText);
    64         $("#loadArea").html(data);
    65         $newPage = $("#divPage"+iNextPageToLoad);
    66         $newPage.hide();                        //移动时需隐藏
    67         $("body").append($newPage);                //添加到body中,也可以是指定的div中
    68         $("#loadArea").html();                    //清空下载区
    69         iNextPageToLoad ++;                        //指定下一个要下载的页码
    70         setTimeout(loadNextPage, iWaitTime);    //定时获取内容
    71     }
    72 }
    73 /**
    74  * 获取指定页码的url
    75  * @param {int} iPage
    76  * @return 返回新的url
    77  */
    78 function getURLForPage(iPage) {
    79     var sNewUrl = location.href;                //当前url
    80     if (location.search.length > 0) {
    81         sNewUrl = sNewUrl.substring(0, sNewUrl.indexOf("?"));
    82     }
    83     sNewUrl += "?page=" + iPage;
    84     return sNewUrl;
    85 }

    后台服务器脚本PHP代码:

     1 <?php
     2     header("Content-type:text/html;charset=utf-8");
     3     $page = 1;
     4     $dataOnly = false;
     5     if (isset($_GET["page"])) {
     6         $page = $_GET["page"];
     7     }
     8     /*当通过ajax获取文章数据时,只获取文章部分而不是页面全部*/
     9     if (isset($_GET['dataOnly']) && $_GET['dataOnly']==TRUE) {
    10         $dataOnly = TRUE;
    11     }
    12     if (!$dataOnly) {
    13 ?>
    14 <!DOCTYPE html>
    15 <html>
    16 <head>
    17     <meta charset="UTF-8">
    18     <title>Article</title>
    19     <style type="text/css">
    20     a{ margin: 0 4px; color:#333; }
    21     .current{ text-decoration: none; font-weight:bold; }
    22     </style>
    23     <script src="../js/jquery-1.8.0.js" type="text/javascript"></script>
    24     <script src="../js/predictiveFetch2.js" type="text/javascript"></script>
    25 </head>
    26 <body>
    27 <h1>Article Title</h1>
    28 <!--接收服务器端数据处-->
    29 <div id="loadArea" style="display:none;"></div>
    30 <?php 
    31     $output = "<p id='pageLink'>Page ";
    32     
    33     for ($i = 1; $i < 4; $i++) {
    34         $output .= '<a href="article.php?page='.$i.'" id="aPage'.$i.'"';
    35         
    36         if ($i == $page) {
    37             $output .= 'class="current"';
    38         }
    39         $output .= ">$i</a>";
    40     }
    41     echo $output;
    42     }//if
    43     if ($page == 1) {
    44 ?>
    45 <div id="divPage1">page1: <br />contents of page 1</div>
    46 <?php 
    47     } else if ($page == 2) {
    48 ?>
    49 <div id="divPage2">page2: <br />contents of page 2</div>
    50 <?php 
    51     } else if ($page == 3) {
    52 ?>
    53 <div id="divPage3">page3: <br />contents of page 3</div>
    54 <?php 
    55     }
    56     if (!$dataOnly) {
    57 ?>
    58 </body>
    59 </html>
    60 <?php 
    61     }//if
    62 ?>
  • 相关阅读:
    【深入学习MySQL】MySQL的索引结构为什么使用B+树?
    【Python爬虫】爬了七天七夜,终于爬出了博客园粉丝数排行榜!
    【BAT面试题系列】面试官:你了解乐观锁和悲观锁吗?
    深入学习MySQL事务:ACID特性的实现原理
    深入学习Redis(5):集群
    深入学习Redis(4):哨兵
    谈谈微信支付曝出的漏洞
    深入学习Redis(3):主从复制
    深入学习Redis(2):持久化
    Spring中获取request的几种方法,及其线程安全性分析
  • 原文地址:https://www.cnblogs.com/mackxu/p/2746166.html
Copyright © 2011-2022 走看看