2015-10-20 163 views
0

可以使用localStorage/sessionStorage緩存.getJSON查詢或在X小時內緩存Cookie?.getJSON緩存數據

<script> 
jQuery(document).ready(function($) { 
    var rateYesterday; 
    $.getJSON("http://api.fixer.io/<?php echo date("Y-m-d", time() - 60 * 60 * 24) ?>", function(dd) { 
    cache: true; 
    rateYesterday = dd; 
    }); 

    var rateToday; 
    $.getJSON("http://api.fixer.io/latest", function(jd) { 
    rateToday = jd; 
    cache: true; 
    console.log("success" + rateToday['rates']['HUF']); 
    $('#first').html(rateToday['rates']['HUF']); 
    $('#second').html(rateToday['rates']['CZK']); 
    if (rateToday['rates']['HUF'] >= rateYesterday['rates']['HUF']) { 
     $('#firstrate').addClass('goood'); 
    } 
    if (rateToday['rates']['HUF'] < rateYesterday['rates']['HUF']) { 
     $('#firstrate').addClass('baaad'); 
    } 
    if (rateToday['rates']['CZK'] >= rateYesterday['rates']['CZK']) { 
     $('#secondrate').addClass('goood'); 
    } 
    if (rateToday['rates']['CZK'] < rateYesterday['rates']['CZK']) { 
     $('#secondrate').addClass('baaad'); 
    }  
}) 
    .fail(function() { 
    console.log("error"); 
    }) 

}); 
</script> 

我在代碼中設置了cache:true,但它並沒有真正緩存數據。

有趣的是如果我按刷新按鈕幾次我有時會:

TypeError: rateYesterday is undefined 
if (rateToday['rates']['HUF'] >= rateYesterday['rates']['HUF']) { 
+1

這將在服務器上做得更好。看到[這個問題](http://stackoverflow.com/questions/9324541/caching-json-apache-php-jquery)及其相關的問題。 – Blazemonger

+0

什麼是更高層次的目標......如果數據存在於存儲中並且沒有過期,請不要提出請求? – charlietfl

+1

另外請注意,你得到undefined的原因是第二個請求可以在第一個請求之前輕鬆完成 – charlietfl

回答

1

正如評論指出,這可能會在服務器上得到更好的做,但拉這一關並回答問題是你能成全做這個。這裏有一種方法:

function HourCache (jsonData) { 
    var stringValue; 
    if (typeof jsonData === 'string') { 
     stringValue = jsonData; 
    } 
    else { 
     stringValue = JSON.stringify(jsonData) 
    } 
    sessionStorage.setItem('jsonData', stringValue); 
    setTimeout(
     function() { 
      sessionStorage.removeItem('jsonData'); 
     }, 3600000 
    ); 
} 
+0

謝謝,我也試過這個和服務器方法。我只是在學習。 – Adrian