javascript - 如何强制 jQuery 向服务器发出 GET 请求以刷新缓存资源

标签 javascript jquery browser-cache

关于如何防止 jQuery AJAX 请求被缓存,网络上有很多答案。 这不是我想要做的。

我需要根据代码中的条件从缓存中返回 AJAX 请求。也就是说,当页面加载期间发出请求时,返回缓存的响应是完全可以的(实际上就是这个意图)。但是当用户单击一个按钮时,我需要从服务器刷新相同的请求。

我知道我可以通过在 jQuery 中设置 cache: false 选项来做到这一点,但这只会请求具有不同 URL 的数据,因此不会在缓存中和下一页刷新响应使用 cache: true 加载请求将返回过时的数据。

我尝试在请求中添加一个 Cache-Control header ,但这至少在 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/

相关文章:

javascript - 将 Google map 与 Vue.js 结合使用

javascript - 如何识别打开的窗口是弹出窗口还是标签页?

javascript - 将最后一个子元素移动到第一个位置不起作用 jquery

javascript - 尽管出现警告消息,表单仍被提交

c++ - 使用 C++ 删除 Internet Explorer 8 历史记录、Cookie、缓存和密码

php - 利用浏览器缓存,如何使用 apache 或 .htaccess?

caching - 在客户端刷新 GWT 应用程序

javascript - 将javascript模块集成到一个文件中进行部署的方法?

javascript - cytoscape.js 右键单击​​新图中显示选定的节点和边

jquery - 如何使用 multer (或其他)使用 jquery ajax 在 Nodejs 中上传文件?