2014-01-25 52 views
1

有沒有人知道如何在沒有jQuery開銷的情況下使用ajaxStop()的功能?我試過在jQuery的GitHub頁面上查看源代碼,但我無法找到它或知道要查看哪些文件。Vanilla JavaScript ajaxStop()

+2

按照文檔的jQuery檢查是否有任何未完成的AJAX請求,如果沒有,它激發ajaxStop事件。所以你要麼建立自己的AJAX請求隊列,要麼使用一個簡單的計數器來實現它,每次AJAX請求被啓動時都會增加,並且每當完成一次就減少。而對於每一個完成的請求,您檢查計數器是否已達到零... – CBroe

+3

讓我們先來看看你的Ajax代碼.... – dthree

+0

@ DC2'$(文件).ajaxStop(函數(){//東西});' –

回答

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/