【发布时间】:2011-10-17 12:14:28
【问题描述】:
我试图为我的 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);
});
这不能按预期工作。有时确实如此,但代码中存在范围问题。有什么办法可以真正伪造整个请求?这样回调机制就可以继续进行。像
请求 => Hook Ajax 调用(停止调用,设置响应) => 继续 ajax
【问题讨论】:
标签: javascript jquery ajax caching local-storage