我是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'
}
答案 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);
}
});
答案 1 :(得分:0)
以下是您的示例代码:
{{1}}
您可以根据需要进行必要的更改。