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(){
...