如果没有可用的缓存,则为Ajax请求

时间:2015-05-29 09:18:37

标签: javascript jquery ajax caching

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

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

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'
}

2 个答案:

答案 0 :(得分:1)

当您的网址对浏览器而言是唯一的时,您的请求响应将不会被缓存。众所周知,练习使用它就像“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/

答案 1 :(得分:0)

以下是您的示例代码:

{{1}}

您可以根据需要进行必要的更改。