我是 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);
}
});
关于javascript - 如果没有可用的缓存,则使用 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525758/