apiCloud实现加载更多效果,基本完美~

简介:

apiCloud实现加载更多效果

1.接口支持,加入参数page。

$page = $this->_request('page','trim','1');
$pagesize = 10; // 默认获取10条

2.利用limit获取数据

select * from sh_category limit 20;
select * from sh_category limit 0,10; // 第一页
select * from sh_category limit 10,10;// 第二页

程序处理

$goods = $this->where($where)->limit(($page-1)*$num,$num)->order($order)->select();

第一页,就是从0,10。第二页,就是10,10。

3.接口提示下一页是否有数据,以及当前页

$this->outData['status'] = '1';
$this->outData['msg']    = '获取成功';
$this->outData['info']['goods']   = $goods;
$this->outData['info']['page']   = $page;
$this->outData['info']['category_id']  = $category_id;
if (count($next_page_goods) > 0) {
   $this->outData['info']['next'] = '1'; // 还有数据
} else {
   $this->outData['info']['next'] = '0'; // 已经没有数据
}

4.前端通过doT处理

<div id="info_area"></div>
<script id="info_tmpl" type="text/x-dot-template">
{{? typeof it.goods != 'undefined'}}
    <div id="goods_data" class="aui-content">
        <ul class="aui-list aui-media-list">
            {{~ it.goods:gval:gkey}}
            <li class="aui-list-item" onclick="openGoodsDetail('{{= gval.name}}','{{= gval.id}}')">
                <div class="aui-media-list-item-inner">
                    <div class="aui-list-item-media">
                        <img src="{{= gval.logoimg}}">
                    </div>
                    <div class="aui-list-item-inner">
                        <div class="aui-list-item-text">
                            <div class="aui-list-item-title">
                                {{= gval.name}}
                            </div>
                        </div>
                        <div class="red">¥{{= gval.price}}</div>
                        <div class="aui-list-item-text">
                            <div class="aui-list-item-title" style="text-decoration:line-through;">{{= gval.oprice}}</div>
                            <div class="aui-list-item-right">已售{{= gval.salecount}}件</div>
                        </div>
                    </div>
                </div>
            </li>
            {{~ }}
        </ul>
    </div>
    {{? it.next == '1'}}
    <div id="more" onclick="ajaxGetMore('{{= it.category_id}}','{{= parseInt(it.page)+1}}')" style="margin: 15px;color:gray;text-align: center;">加载更多</div>
    {{??}}
    <div id="none" style="margin: 15px;color:gray;text-align: center;">没有了</div>
    {{?}}
{{?? }}
    <div style="margin-top:20px;text-align: center;color:gray;">
        暂无数据
    </div>
{{?}}
</script>

这里有个ajaxGetMore方法。处理加载更多数据。

设置一个base_area,专门装填上一页的数据。下一页的数据,继续在info_area中展示。

<div id="base_area" class="aui-content">
</div>
1)默认的ajax获取第一页数据js
// 获取分类商品信息
    api.ajax({
        url: BASE_SH_REQUEST_URL+'/?g=Api&m=Goods&a=getCategoryOptimizedGoods',
        method: 'get',
        data: {
            values: {
                category_id: category_id
            }
        }
    }, function(json, err) {
        if (json.status == '1' || json.status == '4') {
            var interText = doT.template($("#info_tmpl").text());
            $("#info_area").html(interText(json.info));
        } else {
            var toast = new auiToast();
            toast.fail({
                title: json.msg,
                duration: 2000
            });
        }
    });
2)ajaxGetMore获取更多js
// 获取更多
// page为下一页的数值
function ajaxGetMore(category_id,page) {
    var base_area = $api.byId('base_area'); 
    var goods_data= $api.byId('goods_data');
    $api.append(base_area,$api.html(goods_data));

    api.ajax({
        url: BASE_SH_REQUEST_URL+'/?g=Api&m=Goods&a=getCategoryOptimizedGoods',
        method: 'get',
        data: {
            values: {
                category_id: category_id,
                page:page,
            }
        }
    }, function(json, err) {
        if (json.status == '1' || json.status == '4') {
            var interText = doT.template($("#info_tmpl").text());
            $("#info_area").html(interText(json.info));
        } else {
            var toast = new auiToast();
            toast.fail({
                title: json.msg,
                duration: 2000
            });
        }
    });
}

核心就在这里

var base_area = $api.byId('base_area'); 
var goods_data= $api.byId('goods_data');
$api.append(base_area,$api.html(goods_data));

每次点击加载更多,都向base_area区域中把上一页的goods_data数据填入。通过append方法,可以很好的处理这种填入效果。

append,描述:在DOM元素内部,最后一个子元素后面插入HTML字符串。

html,描述:获取或设置DOM元素的innerHTML。

基本完美~



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5974366.html,如需转载请自行联系原作者

相关文章
|
数据采集 数据可视化 搜索推荐
|
存储 安全 分布式数据库
探索区块链技术在数据安全中的应用
【10月更文挑战第21天】 本文深入探讨了区块链技术在增强数据安全性方面的应用。通过对区块链基本原理的解释,结合其在数据存储、传输和访问控制中的具体实现方式,本文揭示了区块链技术如何有效防止数据篡改和未授权访问。此外,文章还讨论了区块链技术面临的挑战及其未来发展趋势,为读者提供了一个全面了解区块链技术在数据安全领域应用的视角。
299 4
|
11月前
|
Prometheus 监控 负载均衡
服务网格容灾系列场景(二):使用服务网格应对可用区级故障容灾
文章介绍了如何使用阿里云服务网格ASM和容器服务Kubernetes版ACK应对可用区级故障容灾,通过多可用区部署、流量管理和可观测性保障业务连续性,确保在单个可用区故障时,其他可用区仍能正常提供服务。
|
Web App开发 移动开发 定位技术
HTML5 Geolocation(地理定位)1
HTML5 Geolocation API 用于获取用户的地理位置,需用户同意才可使用。支持的浏览器包括IE9+、Firefox、Chrome、Safari 和 Opera。此API在GPS设备上定位更精准。示例代码展示了如何使用getCurrentPosition()方法获取并显示用户的位置信息。
|
存储 C语言
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
750 0
|
SQL 存储 数据库
如何在SQLServer中创建数据库
在SQL Server中创建数据库,可通过SSMS的图形界面或T-SQL语句。在SSMS中,连接到服务器,右键“数据库”选择“新建数据库”,配置属性后点击确定。使用T-SQL,连接到服务器,编写CREATE DATABASE语句指定数据库名称、文件路径及大小信息,执行查询完成创建。确保有足够磁盘空间,并注意权限设置。
|
前端开发
layui-form
`layui-form`是一个前端表单组件,提供多种表单类型如单行、多行排列的输入框,下拉选择框(支持模糊搜索),单选框和复选框。表单元素可通过`required`和`lay-verify`属性进行必填和验证设置。编辑器如`layedit`可用于富文本输入,表单监听事件如提交和单选器可绑定回调函数进行处理。此外,能动态更新渲染表单,初始化表单数据并进行数据校验,包括自定义验证规则。
526 1
|
运维 Kubernetes API
ElasticSearch容器化从0到1实践(一)
通过kubernetes集群聚合多个Elasticsearch集群碎片资源,提高运维效率。
|
网络协议 网络架构
计算机网络——计算机网络体系结构(4/4)-计算机网络体系结构中的专用术语(实体、协议、服务,三次握手‘三报文握手’、数据包术语)
计算机网络——计算机网络体系结构(4/4)-计算机网络体系结构中的专用术语(实体、协议、服务,三次握手‘三报文握手’、数据包术语)
732 0
|
存储 安全 网络安全
Pikachu Unsafe Fileupload 通关解析
Pikachu Unsafe Fileupload 通关解析