in this example you can see a generated HTML-list. On every refresh the script requests the data-file (ajax/test.json) and builds the list again.
The generated file "ajax/test.json" is cached statically. But how can I avoid requesting this file on every refresh?
// source: jquery.com
$.getJSON('ajax/test.json', function(data) {
var items = [];
$.each(data, function(key, val) {
items.push('<li id="' + key + '">' + val + '</li>');
});
$('<ul/>', {
'class': 'my-new-list',
html: items.
}).appendTo('body');
});
This doesn't work:
list_data = $.cookie("list_data");
if (list_data == undefined || list_data == "") {
$.getJSON('ajax/test.json', function(data) {
list_data = data;
});
}
var items = [];
$.each(data, function(key, val) {
items.push('<li id="' + key + '">' + val + '</li>');
});
$('<ul/>', {
'class': 'my-new-list',
html: items.
}).appendTo('body');
Thanks in advance!
Because your code loops through
data
which is not in the scope where your$.each
is. Instead:Note that, if you're staying on the same page, you don't need a cookie -- can just stash it in an object somewhere:
If you need to retrieve the data later, or after the page has been refreshed, then use a cookie. But you need to serialize it, because it's not possible to store an object in a cookie:
You may be able to have the browser cache the file normally, see jQuery ajax docs:
http://api.jquery.com/jQuery.ajax/
If I understand correctly, getJson is just an abstraction of an ajax call, specifically for json. You should try setting it to true, which would let the browser cache normally.
Putting it in a cookie can work as well, but has a max size of 4kb. I'm assuming your json isn't nearly that large though.
I did some research myself and it seems that it's feasible to utilize localStorage or the sessionStorage object in Modern Browsers nowadays to storage objects for a certain amount of time. Both have it's limits. Typically the localStorage and sessionStorage object have limits of 5mb. The data is persistent throughout the lifetime of the window/tab. Support isn't too bad (currently 89%) of browsers today.
Both sessionStorage and localStorage share the same API. So choosing where to store your data locally just depends on your use case.
Example of usage
I would also avoid using cookies because of their size limits (4K) and also because cookies are passed back to the server after each transaction.
Sitepoint is a really good resource for the current existing web storage API: http://www.sitepoint.com/an-overview-of-the-web-storage-api/
How 'bout a promise ?
I'd also just use local storage, and if IE7 or below is to be supported, use the shim available on MDN!