无框架 Ajax分页(原创)

我来详细讲解一下“无框架 Ajax分页(原创)”的完整攻略。

概述

在传统的网页开发中,分页一般使用后端程序实现,前端只需引入一个分页控件即可。然而,为了提高用户体验,一些网站开始采用 AJAX 方式实现数据分页,即不刷新整个页面,而只刷新分页部分,避免页面重载,加快页面速度。本文将介绍一种无需框架的 AJAX 分页实现方法。

实现过程

准备工作

首先需要准备后端接口,即对请求进行处理后返回数据。这里我们以 PHP 语言为例,接口的代码如下:

$page = !empty($_GET['page']) ? $_GET['page'] : 1;
$size = !empty($_GET['size']) ? $_GET['size'] : 10;
$start = ($page - 1) * $size;
$data = array();
for ($i = $start; $i < $start + $size; $i++) {
    $data[] = "数据$i";
}
echo json_encode(array(
    'code' => 0,
    'msg' => '',
    'data' => $data,
    'total' => 100,
));

这个接口返回一个包含数据和总数的 JSON 对象。

为了方便调试,我们可以设置一个静态 HTML 页面,然后在页面中编写前端代码。

前端代码

HTML 结构

首先,我们需要在页面中添加分页相关的 HTML 结构,如下所示:

<div id="pager">
    <ul class="pagination"></ul>
</div>
<div id="content"></div>

其中 #pager 分为两个部分,#pager .pagination 为分页组件,#content 为显示内容部分。

CSS 样式

接下来,需要为分页组件添加样式,可以自行设计样式,这里提供一个简单的样式供参考:

.pagination {
    display: inline-block;
    margin-bottom: 0;
    padding-left: 0;
    border-radius: 4px;
}
.pagination li {
    display: inline;
}
.pagination a,
.pagination span {
    position: relative;
    float: left;
    padding: 6px 12px;
    margin-left: -1px;
    line-height: 1.42857143;
    color: #428bca;
    text-decoration: none;
    background-color: #fff;
    border: 1px solid #ddd;
}
.pagination a:hover,
.pagination a:focus,
.pagination span:hover,
.pagination span:focus {
    color: #2a6496;
    background-color: #eee;
    border-color: #ddd;
}

JavaScript 代码

然后需要编写分页的 JavaScript 代码,首先声明一组变量:

var pager = $('#pager .pagination'); // 分页组件
var content = $('#content'); // 显示内容
var url = 'your_api_url'; // 后端接口
var size = 10; // 每页显示的条数
var total = 0; // 总条数
var page = 1; // 当前页码

然后编写分页请求方法:

function getPagedData() {
    $.get(url, {page: page, size: size}, function(resp) {
        if (resp.code === 0) {
            content.empty();
            var html = '';
            for (var i = 0; i < resp.data.length; i++) {
                html += '<div>' + resp.data[i] + '</div>';
            }
            content.html(html);
            total = resp.total;
            renderPager(); // 渲染分页组件
        } else {
            console.error(resp.msg);
        }
    }, 'json');
}

此方法通过 AJAX 请求后端接口,获取分页数据并渲染到页面上。

然后需要编写分页渲染方法:

function renderPager() {
    pager.empty();
    var totalPage = Math.ceil(total / size);
    if (totalPage == 1) {
        return;
    }
    for (var i = 1; i <= totalPage; i++) {
        var li = $('<li><a href="#">' + i + '</a></li>');
        if (i === page) {
            li.addClass('active');
        }
        li.click(function() {
            page = parseInt($(this).text());
            getPagedData();
            return false;
        });
        pager.append(li);
    }
}

此方法通过计算总页数和当前页码,生成分页组件 HTML,然后为每个分页按钮绑定点击事件,点击后切换页码并重新请求数据。

最后,页面加载完毕后需要调用 getPagedData() 方法获取第一页数据,代码如下所示:

$(function() {
    getPagedData();
});

示例说明

下面给出两个基于这个无框架 AJAX 分页的示例:

示例 1:图书列表分页

假设我们有一个图书列表,需要分页显示。我们可以使用上面的代码实现分页功能。具体代码如下所示:

<div id="pager">
    <ul class="pagination"></ul>
</div>
<table class="table">
    <thead>
        <tr>
            <th>#</th>
            <th>书名</th>
        </tr>
    </thead>
    <tbody id="content"></tbody>
</table>
var pager = $('#pager .pagination'); // 分页组件
var content = $('#content'); // 显示内容
var url = 'your_api_url'; // 后端接口
var size = 10; // 每页显示的条数
var total = 0; // 总条数
var page = 1; // 当前页码

function getPagedData() {
    $.get(url, {page: page, size: size}, function(resp) {
        if (resp.code === 0) {
            content.empty();
            var html = '';
            for (var i = 0; i < resp.data.length; i++) {
                var book = resp.data[i];
                html += '<tr>';
                html += '<td>' + (i + 1) + '</td>';
                html += '<td>' + book.name + '</td>';
                html += '</tr>';
            }
            content.html(html);
            total = resp.total;
            renderPager(); // 渲染分页组件
        } else {
            console.error(resp.msg);
        }
    }, 'json');
}

function renderPager() {
    pager.empty();
    var totalPage = Math.ceil(total / size);
    if (totalPage == 1) {
        return;
    }
    for (var i = 1; i <= totalPage; i++) {
        var li = $('<li><a href="#">' + i + '</a></li>');
        if (i === page) {
            li.addClass('active');
        }
        li.click(function() {
            page = parseInt($(this).text());
            getPagedData();
            return false;
        });
        pager.append(li);
    }
}

$(function() {
    getPagedData();
});

示例 2:搜索结果分页

假设我们有一个搜索框,用户输入关键字后,我们需要异步加载搜索结果并分页显示。我们同样可以使用上面的代码实现分页功能。具体代码如下所示:

<div id="pager">
    <ul class="pagination"></ul>
</div>
<ul class="list-group" id="content"></ul>
<form class="form-inline">
    <div class="form-group">
        <input type="text" class="form-control" placeholder="关键词" id="keyword">
    </div>
    <button type="submit" class="btn btn-default">搜索</button>
</form>
var pager = $('#pager .pagination'); // 分页组件
var content = $('#content'); // 显示内容
var url = 'your_api_url'; // 后端接口
var size = 10; // 每页显示的条数
var total = 0; // 总条数
var page = 1; // 当前页码

function getPagedData() {
    var keyword = $('#keyword').val();
    $.get(url, {page: page, size: size, keyword: keyword}, function(resp) {
        if (resp.code === 0) {
            content.empty();
            var html = '';
            for (var i = 0; i < resp.data.length; i++) {
                var item = resp.data[i];
                html += '<li class="list-group-item">' + item.title + '</li>';
            }
            content.html(html);
            total = resp.total;
            renderPager(); // 渲染分页组件
        } else {
            console.error(resp.msg);
        }
    }, 'json');
}

function renderPager() {
    pager.empty();
    var totalPage = Math.ceil(total / size);
    if (totalPage == 1) {
        return;
    }
    for (var i = 1; i <= totalPage; i++) {
        var li = $('<li><a href="#">' + i + '</a></li>');
        if (i === page) {
            li.addClass('active');
        }
        li.click(function() {
            page = parseInt($(this).text());
            getPagedData();
            return false;
        });
        pager.append(li);
    }
}

$('form').submit(function() {
    page = 1;
    getPagedData();
    return false;
});

$(function() {
    getPagedData();
});

以上就是基于无框架 AJAX 分页实现的两个示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:无框架 Ajax分页(原创) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery回调函数

    下面我就来详细讲解一下jQuery回调函数的完整攻略。 什么是jQuery回调函数? 在jQuery中,回调函数是非常常用的一种技术,它允许你在某个特定的代码块(比如Ajax请求或动画效果)执行完成后执行一个指定的函数。 可以把回调函数理解为一种“第二道手”,它在主要操作完成之后增强了jQuery代码的可扩展性和可读性。 回调函数的语法 回调函数的语法非常简…

    jquery 2023年5月12日
    00
  • jQWidgets jqxNotification closeOnClick属性

    以下是关于 jQWidgets jqxNotification 组件中 closeOnClick 属性的详细攻略。 jQWidgets jqxNotification closeOnClick 属性 jQWidgets jqxNotification 的 closeOnClick 属性用于指定是否在单击通知组件时关闭它。 语法 // 获取 closeOnCl…

    jquery 2023年5月12日
    00
  • jQWidgets jqxDataTable pageSize属性

    以下是关于“jQWidgets jqxDataTable pageSize属性”的完整攻略,包含两个示例说明: 简介 jqxDataTable 控件的 pageSize 属性用定义每页显示的记录数。 整攻 以下是 jqxDataTable 控件 pageSize 属性的完整攻略: 定义 pageSize 属性 jqxDataTable 控件中,可以使用 pa…

    jquery 2023年5月11日
    00
  • 如何使用单选按钮来显示和隐藏div元素

    现在我会详细讲解如何使用单选按钮来显示和隐藏div元素的完整攻略。这里需要用到HTML、CSS和JavaScript三种技术。 HTML布局 首先,我们需要在HTML中布局我们的单选按钮和div元素。下面是一个示例代码: <label for="show">显示</label> <input type=&qu…

    jquery 2023年5月12日
    00
  • jQuery UI controlgroup disable()方法

    jQuery UI 的 Controlgroup 组件提供了一个 disable() 方法,该方法用于禁用 Controlgroup。在本教程中,我们将详细介绍 Controlgroup disable() 方法的使用方法。 disable() 方法基本语法如下: $( ".selector" ).controlgroup( "…

    jquery 2023年5月11日
    00
  • jQWidgets jqxTreeGrid可编辑属性

    jQWidgets jqxTreeGrid 是一个功能强大的树形表格组件,支持多种交互操作。其中,可编辑属性是 jqxTreeGrid 的一个重要特性,可以让用户在表格中直接编辑数据,提高数据录入效率。本文将详细讲解 jQWidgets jqxTreeGrid 的可编辑属性,包括如何配置和使用。 可编辑属性 jQWidgets jqxTreeGrid 的可编…

    jquery 2023年5月11日
    00
  • QRCode.js:基于JQuery的生成二维码JS库的使用

    下面是使用QRCode.js生成二维码的详细攻略: 准备工作 在使用QRCode.js之前,需要先引入jQuery库和QRCode.js库文件: <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script…

    jquery 2023年5月27日
    00
  • jQuery函数的等价原生函数代码示例

    jQuery是一个高效、简化的JavaScript库,它在处理DOM操作、动画效果、事件处理等方面有着出色的表现。然而,如果你想要更深入地理解这些操作具体是如何实现的,那么就需要学习一些等价的原生JavaScript函数代码。下面,我们将提供一些示例说明、讲解jQuery函数等价原生函数代码的完整攻略。 示例1:获取页面元素的高度 jQuery示例代码 va…

    jquery 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部