2013-06-29 4 views
3

Я использую некоторый сервис GeoIP для размещения флага страны на страницах, зависит от страны IP. И мне нужно кэшировать ответ JSON для всех страниц моего сайта.Кэш Ответ JSON

Этот код помещается в header.php:

$.getJSON('http://smart-ip.net/geoip-json?callback=?', function(data) { 
    $('#flag').html("<a class='fancybox-inline int' href='#international'><img src='/images/flags/"+data.countryCode+".png'></a>"); 
    } 

Можно ли кэшировать с $.ajaxSetup({ cache: true })? - Кажется, не работает.

Возможно, лучше использовать HTML5 localStorage, но я не уверен, как это сделать.

Я также пробовал JSONCache плагин, но это не сработало для меня.

+0

пытаются использовать $ .ajax имеет функциональность, которую вы ищете. – Manish

+0

@Mac '$ .getJSON' - это запрос ajax службе, которая возвращает JSON. Это метод быстрого доступа, поэтому вам не нужно указывать 'type: 'JSON'' ergo - он использует ajax;) – sircapsalot

ответ

8

Вы можете использовать LocalStorage так:

var smartIp = JSON.parse(localStorage.getItem('smartIp')); 

if (!smartIp) $.getJSON('http://smart-ip.net/geoip-json?callback=?', function (data) { 
    smartIp = localStorage.setItem('smartIp', JSON.stringify(data)); 
}); 

DEMO

Таким образом, в вашем конкретном случае, вы должны использовать этот код в header.php странице:

var smartIp = JSON.parse(localStorage.getItem('smartIp')); 

if (!smartIp) $.getJSON('http://smart-ip.net/geoip-json?callback=?', function (data) { 
    smartIp = localStorage.setItem('smartIp', JSON.stringify(data)); 
    $('#flag').html("<a class='fancybox-inline int' href='#international'><img src='/images/flags/" + data.countryCode + ".png'></a>"); 
}); 
else $('#flag').html("<a class='fancybox-inline int' href='#international'><img src='/images/flags/" + smartIp.countryCode + ".png'></a>"); 
+0

Нужно ли JSON.stringify данные ответа, потому что его json в любом случае ... –

+0

@kasperTaeymans вы имеете в виду «ненужное» вместо этого? Но localstorage может хранить только строку, а не объект javascript, так как бы вы это сделали без «sringified» js-объекта? –

+0

Максимальный размер, который вы можете сохранить таким образом, составляет 5 МБ на домен. http://diveintohtml5.info/storage.html – vumaasha

8

$.getJSON() эквивалентно

$.ajax({ 
    dataType: "json", 
    url: 'http://smart-ip.net/geoip-json/ip_address', 
    data: data, 
    success: function(data){ // do something here } 
}); 

В этой форме вы можете добавить дополнительные параметры, такие как cache:true, или любые другие $ .ajax параметры, которые вам могут понадобиться.

+0

Это действительно работает, но я предпочитаю localStorage soution. Спасибо – Dmitry