DNE.LoadingAjax = {
jqAjax: $.ajax,
requests: {},
globalAjaxPool: [],
unglobalAjaxPool: [],
interval:
null
,
runningType:
null
,
runningId:
null
,
PushAjaxPool:
function
(request, options) {
var
urlComplete = request.complete;
var
requests =
this
.requests;
var
id = (request.tabId) ? request.tabId : request.url;
request.complete =
this
.deleteAjax(urlComplete, id);
var
requestObj = {
id: id,
request: request,
options: options
};
if
(requestObj.request.dataType ==
"json"
) {
if
(request.global) {
this
.globalAjaxPool.push(requestObj);
}
else
{
this
.unglobalAjaxPool.push(requestObj);
}
}
else
{
var
loadingAjax = DNE.LoadingAjax;
loadingAjax.runAjax(requestObj);
}
if
(!
this
.interval) {
this
.interval = window.setInterval(
function
() {
var
loadingAjax = DNE.LoadingAjax;
if
(loadingAjax.runningType != 1 && loadingAjax.globalAjaxPool.length > 0) {
if
(loadingAjax.runningType == 2 && loadingAjax.runningId) {
loadingAjax.ajaxAbort(id);
}
var
reqObj = loadingAjax.globalAjaxPool.shift();
loadingAjax.runAjax(reqObj);
}
else
{
if
(loadingAjax.runningType ==
null
&& loadingAjax.unglobalAjaxPool.length > 0) {
var
reqObj = loadingAjax.unglobalAjaxPool.shift();
loadingAjax.runAjax(reqObj);
}
}
}, 100);
}
},
deleteAjax:
function
(urlComplete, id) {
if
(urlComplete &&
typeof
(urlComplete) ==
"function"
) {
urlComplete();
}
var
loadingAjax = DNE.LoadingAjax;
if
(loadingAjax.requests[id]) {
delete
loadingAjax.requests[id];
}
if
(loadingAjax.globalAjaxPool.length <= 0 && loadingAjax.unglobalAjaxPool.length <= 0) {
loadingAjax.interval =
null
;
}
loadingAjax.runningType =
null
;
loadingAjax.runningId =
null
;
},
runAjax:
function
(reqObj) {
var
jqXHR =
this
.jqAjax(reqObj.request, reqObj.options);
this
.requests[reqObj.id] = jqXHR;
},
ajaxAbort:
function
(id) {
var
jqXHR =
this
.requests[id];
if
(jqXHR) {
jqXHR.abort();
delete
this
.requests[id];
}
}
};
$(
function
() {
$.extend({
ajax:
function
(url, options) {
DNE.LoadingAjax.PushAjaxPool(url, options);
}
});
});