javascript - 如果没有可用的缓存,则使用 Ajax 请求

标签 javascript jquery ajax caching

我是 JavaScript/jQuery 新手,我认为我的问题并不难解决。

我想在 session 中缓存一个变量(列表),如果该列表之前没有缓存,则应该发出 ajax 请求。 我的问题是,在 ajax 请求之后 globalList 为 null,所以我想我必须等待完成请求,但我不知道该怎么做。

var globalList;
function initStuff() {
    globalList = JSON.parse(sessionStorage.getItem('globalList'));
    // if no cached variable is available, get it via ajax request
    if (!globalList) {
        $.getJSON('jsonGetStuff.htm', function (data) {
            sessionStorage.setItem('globalList', JSON.stringify(data));
            globalList = JSON.stringify(data);
        });
    }

    // null, if no cached value is available
    console.log("globalList=" + globalList);

    // TODO: process 'globalList'
}

最佳答案

当您的网址对于浏览器是唯一的时,您的请求响应将不会被缓存。众所周知,练习使用它就像“your.domain.com/some/uri?{timestamp}”。

试试这个:

var globalList;
function initStuff() {
    globalList = JSON.parse(sessionStorage.getItem('globalList'));
    // if no cached variable is available, get it via ajax request
    if (!globalList) {
        $.getJSON('jsonGetStuff.htm?' + (new Date()).getTime(), function (data) {
            sessionStorage.setItem('globalList', JSON.stringify(data));
            globalList = JSON.stringify(data);
        });
    }

    // null, if no cached value is available
    console.log("globalList=" + globalList);

    // TODO: process 'globalList'
}

而且jquery也有cache: false功能(引用:http://www.w3schools.com/jquery/ajax_ajaxsetup.asp):

$(function() {
  $.ajaxSetup({ cache: false });
});

但我很喜欢像上面第一个例子一样这样做。

或者更好的:

$.ajax({
    cache: false,
    url: "jsonGetStuff.htm",
    method: "GET",
    dataType: "json",
    success: function(data) {
        sessionStorage.setItem('globalList', JSON.stringify(data));
        globalList = JSON.stringify(data);
    }
});

引用:http://api.jquery.com/jquery.ajax/

关于javascript - 如果没有可用的缓存,则使用 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525758/

相关文章:

java - JSON:java.lang.Double null 转换为零;我应该如何在客户端处理?

javascript - 在 iframe 加载时隐藏加载器

javascript - 如何在不使用参数的情况下创建 javascript 函数的实例

jquery - 如何找到元素(div)底部的像素值

jquery - 出现网络错误 415 - 不支持的媒体类型

java - 如何处理ajax确认对话框是或否

javascript - 在 Vanilla wegl 中向变换立方体添加定向光

javascript - JavaScript 中的 Promise$2 是什么?

javascript - 我可以从原始文件加载CSS吗?

php - 为 AJAX-PHP-MySQL 生成的表创建动态 Div 标签