ajax获取动态列表数据后的分页问题

这是我在写前台网站时遇到的一个分页问题,由于数据是通过ajax的方式来请求得到的,如果引入相应的js文件来做分页,假如只是静态的填放数据到列表各项内容中(列表条数固定),确实不会出现问题。但是要从ajax中获取数据后要动态添加<li>至<ul>并实现分页,js文件却达不到想要的分页效果。
 
(原因:这是由于js脚本文件会在ajax完成请求之前执行,那么分页用到的js会先执行,而ajax中的动态添加<li>过程实现后确无法执行到分页的代码)
 

操作过程

1.首先,需要引入用到的JS插件
   在这里只需要 引入jquery的插件,下载可以点击打开链接  (相关的CSS样式可自行添加)
  1. <script src="js/jquery.min.js" type="text/javascript"></script>
  2. 2.接下来便是设置ajax取得数据列表放入对应<ul>的位置,以及分页所要用到的上下页及页码的代码
  1. <div>
  2. <ul id="all">
  3.  
  4. </ul>
  5. <div class="page">
  6. <a id="down" href="#" onClick="change1(--pageno)">上一页</a>  
  7. <span id="a3"></span><a id="up" href="#" onClick="change1(++pageno)">下一页</a>
  8. <span class="ho"><span id="a2"></span>/<span id="a1"></span></span></div></div>

3、利用ajax请求到数据,并写上需要用到的两个function,代码如下:

  1. <script>
  2. $(document).ready(function(){
  3. $.ajax({
  4. type:"POST",
  5. url:"##",
  6. contentType:"application/json",
  7. dataType:'json',
  8. data:id,
  9. async:true,
  10. success:function(data){
  11. for(var i=0;i<data.news.length;i++){
  12. var d=data.news[i].releaseTime.split(" ");
  13. var li=$("<li><div class='title'><h6><a href='announcementsArticle.html?newsId="+data.news[i].id+"'>"+data.news[i].themeName+"</a></h6><span class='date'>"+d[0]+"</span></div> </li>");
  14. $("#all").append(li);
  15. }
  16. var a = document.getElementById("all").getElementsByTagName("li");
  17. var zz =new Array(a.length);
  18. for(var i=0;i <a.length;i++)
  19. { zz[i]=a[i].innerHTML } //div的字符串数组付给zz
  20. var pageno=1; //当前页
  21. var pagesize=10; //每页多少条信息
  22. if(zz.length%pagesize==0)
  23. {var pageall =zz.length/pagesize }
  24. else
  25. {var pageall =parseInt(zz.length/pagesize)+1} //一共多少页
  26. $("#p").text(pageall); //将pageall的值存放到div中,便于下次使用
  27. change(1,pageall,zz);
  28. }
  29. });
  30. })
  31.  
  32. var k;
  33. function change(e,all,zu){
  34. zz=zu;
  35. var pagesize=10;
  36. pageall=all;
  37. pageno=e;
  38. if(e <1)//如果输入页<1页
  39. { e=1;pageno=1}//就等于第1页 , 当前页为1
  40. if(e>pageall)//如果输入页大于最大页
  41. {e=pageall;pageno=pageall}//输入页和当前页都=最大页
  42. document.getElementById("all").innerHTML="";//全部清空
  43. for(var i=0;i<pagesize;i++)
  44. {
  45. var div =document.createElement("li");//建立div对象
  46. div.innerHTML=zz[(e-1)*pagesize+i];//建立显示元素
  47. document.getElementById("all").appendChild(div);//加入all中
  48. if(zz[(e-1)*pagesize+i+1]==null)//超出范围跳出
  49. break
  50. }
  51. var ye="";
  52. for(var j=1;j<=pageall;j++)
  53. {
  54. if(e==j)
  55. {ye=ye+"<span><a href='#' onClick='change1("+j+")' style='color:#FF0000'>"+j+"</a></span> "}
  56. else
  57. {ye=ye+"<a href='#' onClick='change1("+j+")'>"+j+"</a> "}
  58. }
  59. document.getElementById("a1").innerHTML=pageall;
  60. document.getElementById("a2").innerHTML=pageno;
  61. document.getElementById("a3").innerHTML=ye;
  62.  
  63. /*如果当前是第一页则:*/
  64.  
  65. if (pageno == 1)
  66. {
  67. $('#down').hide();//隐藏
  68. }else {
  69. $('#down').show();//显示
  70. }
  71.  
  72. /*如果是最后一页则:*/
  73.  
  74. if (pageno == pageall)
  75. {
  76. $('#up').hide();//隐藏
  77. }else {
  78. $('#up').show();//显示
  79. }
  80. k=zu;
  81.  
  82. }
  83. function change1(e){
  84.  
  85. zz=k;
  86.  
  87. var pagesize=10;
  88. pageall=$("#p").text();
  89. pageno=e;
  90. if(e <1)//如果输入页<1页
  91. { e=1;pageno=1}//就等于第1页 , 当前页为1
  92. if(e>pageall)//如果输入页大于最大页
  93. {e=pageall;pageno=pageall}//输入页和当前页都=最大页
  94. document.getElementById("all").innerHTML="";//全部清空
  95. for(var i=0;i<pagesize;i++)
  96. {
  97. var div =document.createElement("li");//建立div对象
  98. div.innerHTML=zz[(e-1)*pagesize+i];//建立显示元素
  99. document.getElementById("all").appendChild(div);//加入all中
  100. if(zz[(e-1)*pagesize+i+1]==null)//超出范围跳出
  101. break
  102. }
  103. var ye="";
  104. for(var j=1;j<=pageall;j++)
  105. {
  106. if(e==j)
  107. {ye=ye+"<span><a href='#' onClick='change1("+j+")' style='color:#FF0000'>"+j+"</a></span> "}
  108. else
  109. {ye=ye+"<a href='#' onClick='change1("+j+")'>"+j+"</a> "}
  110. }
  111. document.getElementById("a1").innerHTML=pageall;
  112. document.getElementById("a2").innerHTML=pageno;
  113. document.getElementById("a3").innerHTML=ye;
  114.  
  115. /*如果当前是第一页则:*/
  116.  
  117. if (pageno == 1)
  118. {
  119. $('#down').hide();//隐藏
  120. }else {
  121. $('#down').show();//显示
  122. }
  123.  
  124. /*如果是最后一页则:*/
  125.  
  126. if (pageno == pageall)
  127. {
  128. $('#up').hide();//隐藏
  129. }else {
  130. $('#up').show();//显示
  131. }
  132. }
  133.  
  134. </script>
  1.  

4、<div style="display" id="p"></div> //用来存放总页数,放置在body中

*注意看上面的代码中success回调函数中我先调用了一次change(1,all,zz)  这是进行了第一页的分页操作,并且我定义了一个全局变量k,当ajax请求完成时change(1,all,zz)这个函数将zz这个数据赋值给了k,这样当进行其他函数执行的时候,由于执行顺序的缘故,k已经变成了数组可以任意调用。(解决了zz这个数据作用的局限性)
 
5.在得到了数组(k)与页数(div的值)的情况下只需要让生成的页码以及上下页中的onclick都触发第二个函数即可。

ajax获取动态列表数据后的分页问题的更多相关文章

  1. Atitit  项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx

    Atitit  项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx 1. 场景:应用在项目列表查询场景下1 1.1. 预计初步掌握vue ...

  2. T-SQL Recipes之生成动态列表数据

    Problem 首先什么是动态列表?举个示例,假设你想输出以逗号分隔的IDs,如: 1,45,67,199,298 Solution 生成动态列表数据在我们生活场景中很常见,比如在 Dynamic P ...

  3. MVC——应用Ajax获取不到数据问题解答

    当我们使用控制器利用Ajax获取表单数据时,调试为null,这时看看你接受表单时定义的参数名字是否为action 其实不能起这个名字的,这个名字和控制器关键字冲突了 随便换个其它名字就好了,比如我起个 ...

  4. vc/mfc获取rgb图像数据后动态显示及保存图片的方法

    vc/mfc获取rgb图像数据后动态显示及保存图片的方法 该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw3 ...

  5. 【比特币】通过dns seeds获取节点列表数据

    通过dns seeds获取节点列表数据 dns seed是什么 返回比特币网络上完整节点IP地址的DNS服务器,用于协助发现节点. 哪里可以查看到 我们在bitcoinj库中,params文件夹内为网 ...

  6. jquery autocomplete ajax获取动态数据,兼容各浏览器,支持中文

    jquery.autocomplete.js经过改动,支持各种浏览器.支持中文输入! 1.效果图例如以下 2.HTML和ajax代码 <!DOCTYPE html> <html xm ...

  7. 通过Jquery中Ajax获取json文件数据

    1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : ...

  8. qt qml ajax 获取 json 天气数据示例

    依赖ajax.js类库,以下代码很简单的实现了获取天气json数据并展示的任务 [TestAjax.qml] import QtQuick 2.0 import "ajax.js" ...

  9. $.ajax获取不到数据问题解决

    $("#updateflow").click(function () { $.ajaxSetup({ contentType: "application/json;cha ...

随机推荐

  1. 如何应用SPRITEKIT的CAMERA实现游戏中的ENDLESS无限循环背景

    A Tutorial For How To Use SpriteKit Camera Making Endless Background Player运用Camera节点向前移动的效果 向前舞动 命为 ...

  2. 国产Linux下开发正式开工(deepin)

    配置开发环境 1.一般工具 在深度商店安装QQ,微信,安装一般软件WPS,Navicat数据库工具,文本编辑notepadqq. 影视娱乐爱奇艺,优酷,酷狗. 2.安装主要的开发环境 (1)c# 深度 ...

  3. 『ACM C++』 PTA 天梯赛练习集L1 | 048-49

    今日刷题048-049 ------------------------------------------------L1-048---------------------------------- ...

  4. Android中,子线程使用主线程中的组件出现问题的解决方法

    Android中,主线程中的组件,不能被子线程调用,否则就会出现异常. 这里所使用的方法就是利用Handler类中的Callback(),接受线程中的Message类发来的消息,然后把所要在线程中执行 ...

  5. python爬虫学习笔记(2)-----代理模式

    一.UserAgent UserAgent 中文意思是用户代理,简称UA,它是一个特殊字符串头,使得服务器能够识别用户 设置UA的两种方式: 1.heads from urllib import re ...

  6. Vagrant 总结

    引言   本文将讨论Vagrant基础应用,高级应用,基于Vagrant 的虚拟机优化,Vagrant的优势及区别等四部分   参考资料: [阿里云教程中心]Docker学习总结之Docker与Vag ...

  7. mysql 多主多从配置,自增id解决方案

    MySQL两主(多主)多从架构配置 一.角色划分 1.MySQL数据库规划 我现在的环境是:zhdy04和zhdy05已经做好了主主架构配置,现在需要的是把两台或者多台从服务器与主一一同步. 主机名 ...

  8. APSC4xSeries_Ver32.exe在win764位提示缺少DLL错误解决办法

    APSC4xSeries_Ver32.exe在win764位提示缺少DLL错误解决办法 从网上下载oatime_epson-me1清零软件,Stylus4xProgram_Ver32的 解决办法:还是 ...

  9. vowels_单元音

    vowels(美式): 单元音: [i]:需要用劲喊出类似于“yi”的四声,费力咧开嘴,单词eat.need.thief.meet. [?]:卷舌音,单词bird.her.worry.certain. ...

  10. Python学习手册之内部方法、操作符重载和对象生命周期

    在上一篇文章中,我们介绍了 Python 的类和继承,现在我们介绍 Python 的内部方法.操作符重载和对象生命周期. 查看上一篇文章请点击:https://www.cnblogs.com/dust ...