微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax延迟插件

最近遇到需要做ajax延迟的需求,上一段代码记录下:

var XHRService = function(options) {
    this.options = options;
    this.reqTimer = null;
};

XHRService.prototype = {
    constructor: XHRService,req: function(options) {
        var that = this,defer = $.Deferred();

        clearTimeout(this.reqTimer);
        this.reqTimer = setTimeout(function() {
            that._req(options,defer);
        },this.options.reqDelay);

        return defer.promise();
    },_req: function(options,defer) {
        var that = this;

        if (this.xhr) {
            this.xhr.abort();
        }

        if (typeof this.options.before === 'function') {
            clearTimeout(this.loadingTimer);
            this.loadingTimer = setTimeout(function() {
                that.options.before();
            },this.options.loadingDelay);
        }

        this.xhr = $.ajax(options).done(function(data) {
                defer.resolve(data);
            })
            .always(function(res,status,xhrObj) {
                clearTimeout(that.loadingTimer);

                if (typeof that.options.after === 'function') {
                    that.options.after();
                }

                if (xhrObj === that.xhr) {
                    that.xhr = null;
                }
            });
    }
};
var xhr = new XHRService({
    reqDelay: 10,loadingDelay: 10,before: function() {
        console.log('show loading...');//显示loadingbar
    },after: function() {
        console.log('hide loading...');//隐藏loadingbar
    }
});
 xhr.req({
        url: url,dataType: 'json'
    }).done(function(data) {
        console.log('done!');
    });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐