下面是我的代碼和問題是與緩存代碼不能正常工作,如果任何ajax調用成功回調。回調在jquery ajax不工作時使用jQuery的ajax緩存代碼低於
var localCache = {
/**
* timeout for cache in millis
* @type {number}
*/
timeout: 30000,
/**
* @type {{_: number, data: {}}}
**/
data: {},
remove: function (url) {
delete localCache.data[url];
},
exist: function (url) {
return !!localCache.data[url] && ((new Date().getTime() - localCache.data[url]._) < localCache.timeout);
},
get: function (url) {
console.log('Getting in cache for url' + url);
return localCache.data[url].data;
},
set: function (url, cachedData, callback) {
localCache.remove(url);
localCache.data[url] = {
_: new Date().getTime(),
data: cachedData
};
if ($.isFunction(callback)) callback(cachedData);
}
};
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
if (options.cache) {
var complete = originalOptions.complete || $.noop,
url = originalOptions.url;
//remove jQuery cache as we have our own localCache
options.cache = false;
options.beforeSend = function() {
if (localCache.exist(url)) {
complete(localCache.get(url));
return false;
}
return true;
};
options.complete = function (data, textStatus) {
localCache.set(url, data, complete);
};
}
});
function handleAjaxRequests(url, parameters, headers, method, successHandler, options, errorHandler) {
if (typeof (method) === 'undefined') {
method = "GET";
}
if (typeof (headers) === 'undefined') {
headers = "";
}
if (typeof (parameters) === 'undefined') {
parameters = "";
}
successHandler = typeof (successHandler) === 'undefined' ? function (data) {} : successHandler;
errorHandler = typeof (errorHandler) === 'undefined' ? function (data) {} : errorHandler;
return $.ajax({
method: method.toUpperCase(),
url: url,
// async: false,
data: parameters,
headers: headers,
success: function (data) {
console.log('hi');
successHandler(data, options);
console.log('bye');
},
error: function (data) {
$('.loader').hide();
errorHandler(data);
},
});
}
按照上面的代碼後成功運行AJAX successHandler(data, options);
功能應該是觸發,但不是由於上述高速緩存處理程序代碼。我不知道爲什麼這不起作用。如果我寫簡單的東西,而不是回調函數,它正在工作。數據表Ajax回調也存在同樣的問題。 我必須在我的項目中使用上面的緩存處理程序在全局級別無關緊要的ajax請求是從數據表或從任何其他來源。
上面的cache代碼是從這裏https://stackoverflow.com/a/17104536/2733203
是'嗨'打印? – 82Tuskers
@ 82Tuskers在請求沒有被緩存時打印。請求緩存後不打印嗨。 –
也可以讓我們知道你是如何調用'handleAjaxRequests(...)'?另外,你能否在你的AJAX錯誤處理程序中輸入調試語句? – 82Tuskers