香草JavaScript ajaxStop()

时间:2014-01-25 19:03:12

标签: javascript jquery ajax

有没有人知道如何使用ajaxStop()的功能而不需要jQuery的开销?我已经尝试在jQuery的GitHub页面上查看源代码,但是我无法找到它或知道要查看哪些文件。

1 个答案:

答案 0 :(得分:2)

你可以拦截每个ajax呼叫并自己跟踪它。这应该给你一个想法:

var interceptor = (function(open) {

    var activeXhr = [];

    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {

        this.addEventListener('readystatechange', function() {

            switch(this.readyState){

                case 1: // opened request
                    activeXhr.push(this);
                    break;

                case 4: // request done
                    var i = activeXhr.indexOf(this);

                    if(i > -1) 
                        activeXhr.splice(i, 1); // remove finished request

                    if(!activeXhr.length) // if all requests are done
                        console.log('ajax stop');

                    break;
            }

        }, false);

        open.call(this, method, url, async, user, pass);
    };

})(XMLHttpRequest.prototype.open);

$.ajax({ url: '/echo/json/', data: { delay: 1 } });
$.ajax({ url: '/echo/json/', data: { delay: 2 } });
$.ajax({ url: '/echo/json/', data: { delay: 3 } });

http://jsfiddle.net/saR2a/