网上有很多答案,说明如何防止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/

10-12 00:21
查看更多