Я пытался написать собственный механизм кэширования для моих вызовов ajax, которые в основном являются просто вызовами данных.Поэтому вместо того, чтобы помещать их в кеш браузера, я помещаю их в localStorage для долгосрочного использования.
Но я не могу понять, как подделать завершение запроса для JQuery.ajax.Я могу успешно перехватить вызов, но мои вызовы функции обратного вызова по какой-то причине не имеют такой же области видимости.
$.ajaxPrefilter(
function( options, originalOptions, jqXHR ) {
var key;
originalOptions.data = originalOptions.data || {};
key = options.localStorageKey = options.url + '?' + $.param(originalOptions.data);
var value = localStorage.getItem(key);
if(value)
{
//Still not working
jqXHR.abort();//Abort this call
options.success(JSON.parse(value));//Call the callback function
return jqXHR();//return xhr for chaining (?)
}
});
$('#logo').ajaxComplete(function(e,xhr,settings) {
//cache the request
localStorage.setItem(settings.localStorageKey,xhr.responseText);
});
Это не работает, как задумано.Иногда это так, но в коде есть проблемы с областями видимости.Есть ли способ, которым я мог бы подделать весь запрос?Так что механизм обратного вызова продолжается, как это происходит.Что-то вроде
Запрос => Перехватить Ajax-вызов (остановить вызов, установить ответ) => Продолжить ajax