AJAX Super Requests

by darcyclarke

HTML

<script src="https://raw.github.com/mennovanslooten/mockJSON/master/js/jquery.mockjson.js"></script>

JavaScript

var App = {};
App.queue = new Array;

App.remove = function(arr, el){
    for(var i=0;i<arr.length;i++){ 
        if(arr[i]===el){
            arr.splice(i,1);
            return true;
        } 
    }
    return false;
};

/**************************************************/
/* AJAX Handler
/**************************************************/
App.ajax = function(options){
    options = jQuery.extend({ dequeue: function(){ App.ajaxDequeue(this.id); console.log(">> DEQUEUE:", this); }, id: ((new Date()).getTime() + "" + Math.floor(Math.random() * 1000000)).substr(0, 18), action : false, queue : false}, options);
    
    App.queue[options.id] = options;
    
    console.log('-----');
    console.log('ID:'+options.id);
    
    if( options.action !== false ){
        if( App.queue[options.action] === false || App.queue[options.action] === undefined || options.queue === false ){
            if( options.queue === false && App.queue[options.action][0].abort ){
                App.queue[options.action][0].always(function(){});
                App.queue[options.action][0].abort();
            }
            console.log('>> CREATE QUEUE');          
            App.queue[options.action] = [];   
        }   
         
        App.queue[options.action].push(options.id);
        console.log('Length:'+App.queue[options.action].length);
        if( App.queue[options.action].length === 1 ){
            console.log('>> QUEUE + RUN');
            App.ajaxRun(options.action);
            return options.id; 
        }
        console.log('>> JUST QUEUE');
        return options.id;        
    } else {
        console.log('>> JUST RUN');
        App.queue[id] = jQuery.ajax(options);
        return options.id;   
    }
};

App.ajaxRun = function(action){
    console.log(">> START AJAX");
    jqXHR = App.queue[App.queue[action][0]] = jQuery.ajax(App.queue[App.queue[action][0]]);
    console.log(">> QUEUE LENGTH:"+App.queue[action].length);
    jqXHR.always(function(){
       ...