2013-06-29 2 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

시도 :

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 페이지에이 코드를 사용한다 .ajax 그것은 당신이 찾고있는 기능을 가지고 있습니다. – Manish

+0

@Mac'$ .getJSON'은 JSON을 구체적으로 반환하는 서비스에 대한 ajax 요청입니다. 그것은 바로 가기 방법이므로'type : 'JSON'ergo - 그는 ajax를 사용하고 있습니다;) – sircapsalot

답변

8

당신은 그와 같은 로컬 스토리지를 사용할 수 있습니다 : $를 사용하는

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

그 JSson 어쨌든 때문에 JSON.stringify 응답 데이터가 필요합니다 ... –

+0

@ kasperTaeymans 대신 '불필요한'의미합니까? 하지만 localstorage는 자바 스크립트 객체가 아닌 문자열 만 저장할 수 있으므로 'sringified'js 객체가 없으면 어떻게할까요? –

+0

이 방법으로 저장할 수있는 최대 값은 도메인 당 5MB입니다. http://diveintohtml5.info/storage.html – vumaasha

8

$.getJSON()는 추가 매개 변수와 같은 cache:true, 또는 당신이 필요로 할 수있는 다른 $ 아약스 매개 변수를 추가 할 수 있습니다이 양식에서

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

에 해당합니다.

+0

이 타입도 실제로 작동하지만, localStorage soution을 선호합니다. 감사합니다 – Dmitry