ajax请求执行完成后再执行其他操作(jQuery.page.js插件使用为例)

就我们做知,ajax强大之处在于它的异步请求,但是有时候我们需要ajax执行彻底完成之后再执行其他函数或操作

这个时候往往我们用到ajax的回调函数,但是假如你不想或者不能把接下来的操作写在回调函数中,怎么办?

以jquery.page.js插件为例,分页初始化如下:

$(".tcdPageCode").createPage({
        pageCount:100,
        current:1,
        backFn:function(p){
            //console.log(p);
        }
    });

这里pageCount总页数我需要从后台动态获取,也就是需要ajax请求接口后返回的值

一开始我把分页初始化的这段代码写在ajax的回调函数中

function getRecourcesAction(result) {
    if (result != null) {
       $(".tcdPageCode").createPage({   
        pageCount: result.pageCount,
        current: nowPage,
        backFn: function (p) {
            pageNo=p-1;
            nowPage=p;
            getRecources(getRecourcesAction);
        }
    });
        var html = template('recources', {
            list: result.data
        });
        $("#recource li").remove();
        $("#recource").append(html);
    } 
    else {
        layer.open({
                title: '提示',
                content: "资源查询失败!"
            });
    }
}

因为backFn中会继续请求,所以会重复创建,上一页、下一页翻页时会出现连续跳页的情况,最后超出总页数而溢出出错

解决办法:

设置全局变量pageCount,先进行ajax请求,得到返回的总页数后赋值给pageCount,然后再进行初始化分页。注意:ajax请求时,设置async: false(默认为true),进行同步请求,即Ajax请求将整个浏览器锁死,只有请求结束后才能执行其他操作,否则pageCount值还未返回就先初始化分页了。

$(function(){
    getRecources(getRecourcesAction);   //初始化页面(资源初始化)
  
    //初始化分页
    $(".tcdPageCode").createPage({   
        pageCount: pageCount,
        current: nowPage,
        backFn: function (p) {
            pageNo=p-1;
            nowPage=p;
            getRecources(getRecourcesAction);
        }
    });
});

 

转载于:https://www.cnblogs.com/dreamsqin/p/6557001.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值