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!');
    });

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...