2013-06-29 4 views
3

L'utilisation de certains services GeoIP pour placer un indicateur de pays sur des pages dépend de l'adresse IP du pays. Et j'ai besoin de mettre en cache la réponse JSON pour toutes les pages de mon site.La réponse JSON du cache

Ce code placé dans 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>"); 
    } 

Est-il possible de mettre en cache avec $.ajaxSetup({ cache: true })? - semble ne pas fonctionner.

Ou probablement préférable d'utiliser HTML5 localStorage, mais je ne suis pas sûr de savoir comment faire.

J'ai également essayé le plugin JSONCache, mais cela n'a pas fonctionné pour moi.

+0

essayer d'utiliser $ .ajax il a la fonctionnalité que vous recherchez. – Manish

+0

@Mac '$ .getJSON' est une requête ajax à un service qui renvoie spécifiquement JSON. C'est une méthode de raccourci donc vous n'avez pas à spécifier 'type: 'JSON'' ergo - il utilise ajax;) – sircapsalot

Répondre

8

Vous pouvez utiliser localStorage comme ça:

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

Ainsi, dans votre cas, vous devez utiliser ce code dans votre header.php page:

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

Est-il nécessaire de JSON.stringify les données de réponse parce que son json de toute façon ... –

+0

@kasperTaeymans voulez-vous dire «inutile» à la place? Mais localstorage ne peut stocker que des chaînes, pas des objets javascript, alors comment le feriez-vous sans 'jsring'? –

+0

Le maximum que vous pouvez enregistrer de cette façon est de 5 Mo par domaine. http://diveintohtml5.info/storage.html – vumaasha

8

$.getJSON() est équivalent à

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

Dans ce formulaire, vous pouvez ajouter des paramètres supplémentaires, tels que cache:true, ou tout autre .ajax $ paramètres vous pourriez avoir besoin.

+0

Celui-ci fonctionne réellement aussi, mais je préfère la solution localStorage. Merci – Dmitry