默认加载数据分页,点击分页后再次异步数据

一、前言

现在主流的分页插件很多是一次性把数据加载完成,再本地分页,切换时候是Tab效果,数据量大or网络不通畅的时候,就会很卡影响加载效果。

实现每页加载固定条数及点击分页再次请求数据,假设共100条数据,一页10条的话共10页。需要后端配合每页显示全部的条数及每页条数。

二、后端数据

根据pageNum=1查询,返回json数据

count数据总数

pageNum 第一页

pageSize 每页10条

三、代码

分页代码:

function(e) {
  function s() {
    this.maxSpanNumber = 5
  }
  s.prototype = {
    initialPage: function(e, s) {
      this.rounding = parseInt(e / s), this.remainder = Number(e % s), this.spanNumber = this.rounding + (this.remainder > 0 ? 1 : 0)
    }
  }, e.fn.paging = function(n, a, t) {
    var r = e(this),
      i = new s;
    i.initialPage(n, a), r.attr({
      total: n,
      pageSize: a,
      activePage: 1,
      spanNumber: i.spanNumber,
      maxspannumber: i.maxSpanNumber
    });
    var o = ‘<span pageindex="first">首页</span>‘,
      l = ‘<span pageindex="last">末页</span>‘,
      d = "";
    if (i.spanNumber <= i.maxSpanNumber) {
      for (var p = 1; p <= i.spanNumber; p++) d += ‘<span pagenumer="‘ + p + ‘" pageindex="‘ + p + ‘">‘ + p + "</span>";
      r.html(o + d + l)
    } else {
      o += "<span class=‘none‘ pageindex=‘forward‘>...</span>", l = "<span pageindex=‘backward‘>...</span>" + l;
      for (var p = 1; p <= i.spanNumber; p++) d += p > i.maxSpanNumber ? ‘<span class="none" pagenumer="‘ + p + ‘" pageindex="‘ + p + ‘">‘ + p + "</span>" : ‘<span class="not_none" pagenumer="‘ + p + ‘" pageindex="‘ + p + ‘">‘ + p + "</span>";
      r.html(o + d + l)
    }
    e(‘span[pagenumer="1"]‘).addClass("current");
    var c = r.children(‘span[pageindex="backward"]‘),
      m = r.children(‘span[pageindex="forward"]‘),
      h = r.children("span[pagenumer]");
    r.delegate("span", "click", function() {
      switch (e(this).attr("pageindex")) {
        case "first":
          r.children(".current").removeClass("current"), r.children(‘span[pagenumer="1"]‘).addClass("current"), i.spanNumber <= i.maxSpanNumber ? c.addClass("none") : c.removeClass("none"), m.addClass("none"), h.addClass("none").removeClass("not_none"), r.children("span[pagenumer]:lt(" + i.maxSpanNumber + ")").addClass("not_none").removeClass("none");
          break;
        case "forward":
          var s = r.children("span.not_none").first(),
            n = s.attr("pagenumer") - 1;
          s.addClass("none").removeClass("not_none").nextAll(".not_none").addClass("none").removeClass("not_none"), n <= i.maxSpanNumber ? (r.children("span[pagenumer]:lt(" + i.maxSpanNumber + ")").addClass("not_none").removeClass("none"), m.addClass("none")) : s.prevAll(".none:lt(" + i.maxSpanNumber + ")").addClass("not_none").removeClass("none"), c.removeClass("none");
          break;
        case "backward":
          var a = r.children("span.not_none").last(),
            o = a.index() - 1,
            l = i.spanNumber - o;
          a.addClass("none").removeClass("not_none").prevAll(".not_none").addClass("none").removeClass("not_none"), l <= i.maxSpanNumber ? (r.children("span[pagenumer]:gt(" + (i.spanNumber - i.maxSpanNumber - 1) + ")").addClass("not_none").removeClass("none"), c.addClass("none")) : a.nextAll(".none:lt(" + i.maxSpanNumber + ")").addClass("not_none").removeClass("none"), m.removeClass("none");
          break;
        case "last":
          r.children(".current").removeClass("current"), r.children("span[pagenumer]:last").addClass("current"), i.spanNumber <= i.maxSpanNumber || (h.addClass("none").removeClass("not_none"), m.removeClass("none"), c.addClass("none").prevAll("span:lt(" + i.maxSpanNumber + ")").addClass("not_none").removeClass("none"));
          break;
        default:
          r.children(".current").removeClass("current"), e(this).addClass("current")
      }
      r.attr("activepage", r.children(".current").index() - 1), t && t(e(this).attr("pageindex"))
    })
  }
}(jQuery),

 异步数据

var baseModule = {
  loadAjax: function(url, type, data, loadCallback){
      $.ajax({
        url: url,
        type: type,
        data: data,
        beforeSend: showLoad,
        success: function(d){
          if(loadCallback){
            loadCallback(d);
            hideLoad();
          }
        },
        error: function(e){
          var msg = $.parseJSON(e.responseText);
          alert(msg.error);
          hideLoad();
        }
      });
    }
}

 调用

//默认加载取得数据
    baseModule.loadAjax(url, "get", {用户id和pageNum}, ListsCallback);
    //传入数据 显示分页
    function ListsCallback(d){
        showLists(d);
        $("#page").paging(pageCount, pageSize, refreshLists);
    }
    //分页点击后 再异步数据
    function refreshLists(i){
        switch (i){
            case "first":
                i = 1;
                break;
            case "last":
                i = Math.ceil(pageCount / pageSize);
                break;
            case "backward":
                return;
            case "forward":
                return;
        }
        if(data.pageNum === i){return;}
        data.pageNum = i;
        baseModule.loadAjax(url, "get", {用户id和pageNum}, showLists);
    }
    //传入数据 插入页面
    function showLists(o){
        var index,
            h = "",
            d = o.data.list;
        if(!d){alert("暂无记录");return;}
        pageSize = o.data.pageSize;//覆盖每页条数
        pageCount = o.data.count;//覆盖总条数
        //操作
        });
    }

 

时间: 2024-10-12 07:36:00

默认加载数据分页,点击分页后再次异步数据的相关文章

ExtJS4.2 仅需配置URL动态加载GridPanel列(带分页)

最近做ExtJS一直想做个傻瓜式的GridPanel,今天折腾了一天,从GitHub找到的老外写的解决方案, 在他的基础上做了一些改动,增加了分页,增加了columns手动配置(原本只能动态生成),大家有兴趣可以自由扩展,我做了很详细的注释 效果图如下,仅需在html页面引入ext.all,并创建自定义控件,配置url即可创建带分页效果的GirdPanel 代码: 效果图: 一.动态加载自定义控件 自定义脚本包括两部分:DynamicGrid.js和DynamicReader.js 将Ext目录

viewpager+fragment的懒加载实现微信点击和滑动切换功能(切换效果)

前言 1.从上一片文章之后已经半年没有写文章了,那篇文章之后公司进入疯狂的加班,一直到放年假.年后回来之后换了一家创业公司之后,然后又进入疯狂的加班(≧﹏ ≦) -所以一直都没有写文章(其实这都是借口⊙﹏⊙).现在公司没有那么忙了,也该把文章捡起来了,这毕竟是百利有一害的事(一害:费时间). 2.这半年里除了对代码的热情更加高涨(虽然它总是虐我千百遍(≧﹏ ≦) ),还深深的中了爬山的毒,对于年轻的我来说,爬山让我明白了许多.懂得了许多,也锻炼了我的身体.对于程序员来说身体是非常重要的,大家在周

「小程序JAVA实战」 小程序默认加载的页面和生命周期(八)

转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-08/ 小程序如何加载的呢?生命周期!源码:https://github.com/limingios/wxProgram.git 中的No.3 加载页面 小程序默认加载的pages中的第一个目录 不管你的名称,只管你的顺序 其他目录需要通过触发才能加载 生命周期 相关的框架的时候都有生命周期的概念,通过了解生命周期更好的把控框架的使用! onLaunch 第一次打开小程序的初始化,也被调用一次.

【转】GridView 加载空行并点击编辑每一个单元格

1 代码 2 3 <script runat="server"> 4 protectedvoid Button1_Click(object sender, System.EventArgs e) 5 { 6 GridView1.DataSource = GetData(); 7 GridView1.DataBind(); 8 } 9 10 protectedvoid Button2_Click(object sender, System.EventArgs e) 11 {

myeclipse 2014 除了 默认加载的derby

myeclipse 2014 去掉 默认加载的derby作为有轻微强迫症的我来说,server下面有一个我始终用不到的东西我是很不舒服的.最终我网查到解决办法,现在分享给大家.================华丽的分割线========================在MyEclipse安装目录下打开configuration\org.eclipse.equinox.simpleconfigurator\bundles.info搜索derby(在16行应该是)找到com.genuitec.ecl

关于iOS UIWebView 加载网页,点击网页内某些控件导致 Application &#39;UIKitApplication:xxx.xxx.xxx&#39; was killed by jetsam.

问题:公司用的腾讯问卷系统,内嵌在我们应用或游戏的自定义UIWebView里面展示,发现在iOS 10 以下系统,点击圆形勾选框 会大概率出现闪退. 通过联调发现:报了这样一个警告Application 'UIKitApplication:xxx.xxx.xxx' was killed by jetsam. 然后没有更多的信息了. (连接真机调试,当发生闪退的时候,设备会同时跟Xcode断开连接,没有更多的错误堆栈,另外设备也没有记录下更多的Crash log 提供定位.) 最后从以下获取到近似

CentOS7 更改默认加载内核

CentOS7 更改默认加载内核 cat /boot/grub2/grub.cfg |grep menuentry  注意是单引号里面的都是.这里可以看到,这台机器目前有三个内核. 设置指定内核为默认加载项: grub2-set-default “CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)” 配置默认内核,验证是否修改成功: grub2-editenv list  重启系统,查看当前内核: uname -r 原文地址:https://www.cnb

Android设置Notification从网络中加载图片,解决点击无法消失的bug

Notification的构造函数中只支持使用资源文件的图片作为图片,但是如果我们想用网络中的图片怎么办呢. 我们知道,给Notification设置内容的时候调用的是setLatestEventInfo方法,当我们点击去看该方法的时候,所有的结果都一目了然了. public void setLatestEventInfo(Context context, CharSequence contentTitle, CharSequence contentText, PendingIntent con

easyui下拉列表级联操作,加载完毕后自动默认加载第一项的下级菜单

1.html代码: <td width="80px;">科目名称:</td> <td style="text-align: left;"> <select id="accountitem" name="accountitem" class="easyui-combobox" style="width:150px;" data-options=&q