如何使用jQuery更新cookie值而不刷新页面?

时间:2012-03-21 16:03:21

标签: jquery session-cookies

我目前正在使用jQuery Cookies插件,根据观看者点击的页面哪一侧,会应用Cookie:

<div id="leftClick">Click Me</div>
<div id="rightClick">Click Me</div>

问题是一旦存储了cookie,它就不会在没有刷新的情况下更新。因此,如果观看者点击了正确的元素,但在刷新页面之前,那么在左侧元素之后,尽管cookie已被_left覆盖,但它仍然会向右报告,因为页面尚未刷新。有没有一种方法可以在没有页面刷新的情况下实时读取cookie?

<script type="text/javascript">
    var readCookie = $.cookie('whichSide');
    $(document).ready(function() {
       $('#leftClick').click(function(){
        $.cookie('whichSide', 'left_');
      }); 
    $('#rightClick').click(function(){
        $.cookie('whichSide', 'right_');
      });
    $('#login').click(function(){
        _gaq.push(['_trackEvent', 'viewerChose', readCookie+'side']);
    });   
  });  
​</script>  

3 个答案:

答案 0 :(得分:5)

这是因为您将cookie的值存储在readCookie变量中。更新cookie时,此变量不会自动更新,这就是您在引用cookie时获取旧值的原因。

你可能想要这样的东西:

$('#login').click(function(){
    _gaq.push(['_trackEvent', 'viewerChose', $.cookie('whichSide')+'side']);
});

答案 1 :(得分:3)

您只读取一次readCookie值,然后在.click函数中使用该值。尝试在点击事件中阅读它,这样您就可以使用最新的值:

$('#login').click(function(){
    var readCookie = $.cookie('whichSide');
    _gaq.push(['_trackEvent', 'viewerChose', readCookie+'side']);
}); 

答案 2 :(得分:2)

在您自己缓存cookie的值时从代码中删除它。

var readCookie = $.cookie('whichSide');

将代码更改为此处,您可以在每次需要时在$("#login").click()处理程序中获取cookie值的新副本,而不是引用以前保存的值:

<script type="text/javascript">
    $(document).ready(function() {
       $('#leftClick').click(function(){
        $.cookie('whichSide', 'left_');
      }); 
    $('#rightClick').click(function(){
        $.cookie('whichSide', 'right_');
      });
    $('#login').click(function(){
        _gaq.push(['_trackEvent', 'viewerChose', $.cookie('whichSide')+'side']);
    });   
  });  
​</script>