网上有很多答案,说明如何防止jQuery AJAX请求被缓存。这不是我想做的。
我需要根据代码中的条件从缓存中返回AJAX请求。也就是说,当在页面加载期间发出请求时,完全可以返回缓存的响应(实际上就是本意)。但是,当用户单击按钮时,我需要从服务器刷新相同的请求。
我知道我可以通过在jQuery中设置cache: false
选项来做到这一点,但这只会请求使用其他URL的数据,因此不会刷新缓存中的响应,并且在下一页加载期间,使用cache: true
的请求将返回过时的数据。
我尝试向请求添加Cache-Control
标头,但至少在IE10中没有效果。
$.ajax({
url: Configuration.ApiRootUri + "Notifications",
type: "GET",
headers: { 'Cache-Control': refreshCache ? 'no-cache' : 'private' },
success: function(data) {}
});
是否有可能强制浏览器从脚本刷新缓存的资源?
最佳答案
(注:讨论后在评论中重写)
一种解决方案是将服务器的响应存储在本地存储中,并在页面加载时将其加载(如果存在)。
这样可以完全避免在启动时向服务器发出的请求,并且就像在浏览器中一样充当缓存。
这是一个伪算法示例:
function loadRequest(){
Call Ajax request
On success, store the result in the localstorage, call updateHtml(result);
}
function updateHtml(data) {
Update the specific html (list, view, etc) with the data
}
$('#mybutton').on ('click', loadRequest);
$(function() {
Check if the data in the localstorage exists
if exists, call updateHtml(localstorage.value);
else call loadRequest
});
而已!
关于javascript - 如何强制jQuery向服务器发出GET请求以刷新缓存的资源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18912655/