2015-10-20 162 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