以下は私のコードです。問題が発生した場合、キャッシュ・コードは正常に動作していません。上記のコードを1として以下の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);
を実行した後に機能がトリガする必要がありますが、キャッシュハンドラコード上記にそれが原因ではありません。なぜこれが動作していないのか分かりません。コールバック関数ではなく単純なものを書くと、それは機能しています。 datatable Ajaxコールバックと同じ問題。 プロジェクトのグローバルレベルで上記のキャッシュハンドラを使用しなければならないのは、データテーブルや他のソースからのajaxリクエストではありません。キャッシュコードの上
私はあなたのコード内のいくつかの変更を加えましたチャットルームで議論したように、ここでhttps://stackoverflow.com/a/17104536/2733203
は「ハイ」印刷ですか? – 82Tuskers
@ 82Tuskers要求がキャッシュされていないときに印刷されます。要求がキャッシュされた後、それはhiを印刷しません。 –
あなたは 'handleAjaxRequests(...)'をどのように呼んでいるか知っていますか?また、AJAXエラーハンドラにデバッグ文を入力することもできますか? – 82Tuskers