【问题标题】:Use Jquery to update a PHP session variable when a link is clicked单击链接时使用 Jquery 更新 PHP 会话变量
【发布时间】:2011-12-05 16:31:02
【问题描述】:

我有几个用户可以使用 jquery 切换方法最小化或扩展的 div。然而,当页面被刷新时,Div 会回到它们的默认状态。他们是一种让浏览器记住 div 的最后状态的方法吗?

例如,如果我展开一个 ID 为“my_div”的 div,然后单击页面上的其他内容,然后返回到原始页面,我希望“my_div”保持展开状态。

我认为可以为此使用会话变量,也许当用户单击展开/最小化按钮时,可以发送 AJAX 请求并切换会话变量...IDK..有什么想法吗?

【问题讨论】:

  • 您是否尝试过某些东西,或者只是尝试有人为您实现它?看看api.jquery.com/jQuery.ajax
  • 我已经尝试了 jquery 的 $.post 方法,还没有完全弄清楚如何将它附加到我页面上的 a 标签上,以便单击链接它运行 $.post thingamajig
  • 你不能为此使用 cookie 吗?如果值不需要存储在服务器上,它应该就足够了——而且它更简单(例如使用 jquery.cookie.js)
  • 谢谢,我会调查一下 cookie 的问题。
  • 我已经用一些示例代码更新了我的评论 - 它使用 jStorage,但相同的逻辑可以用于 cookie。

标签: php jquery session html toggle


【解决方案1】:

不需要 ajax 请求,只需将信息存储在 cookie 或本地存储中即可。 这是一个可以帮助您的库:http://www.jstorage.info/

一些示例代码(未经测试):

// stores the toggled position
$('#my_div').click(function() {
    $('#my_div').toggle();
    $.jStorage.set('my_div', $('#my_div:visible').length);
});

// on page load restores all elements to old position
$(function() {
    var elems = $.jStorage.index();
    for (var i = 0, l = elems.length; i < l; i++) {
        $.jStorage.get(i) ? $('#' + i).show() : hide();
    }
});

【讨论】:

    【解决方案2】:

    如果不需要支持旧浏览器,可以使用html5 web storage

    您可以这样做(示例取自 w3schools):

    以下示例计算用户访问某个网站的次数 页面,在当前会话中:

    <script type="text/javascript">
    if (sessionStorage.pagecount) {
      sessionStorage.pagecount=Number(sessionStorage.pagecount) +1;
    }
    else {
      sessionStorage.pagecount=1;
    }
    document.write("Visits "+sessionStorage.pagecount+" time(s) this session.");
    </script>
    

    【讨论】:

      【解决方案3】:

      其他人已经给出了与 cookie 和本地存储 API 相关的有效答案,但根据您对该问题的评论,以下是您如何将 click 事件处理程序附加到链接:

      $("#someLinkId").click(function() {
          $.post("somewhere.php", function() {
              //Done!
          });
      });
      

      只要点击它所附加的元素,事件处理函数就会运行。在事件处理程序中,您可以运行任何您喜欢的代码。在此示例中,向somewhere.php 发起了一个 POST 请求。

      【讨论】:

        【解决方案4】:

        我有类似的东西,我根据哪个用户登录使用 cookie 如果您只想要主 div,请不要使用

              $('#'+div_id).next().css('display','none');  
        

        使用

              $('#'+div_id).css('display','none'); 
        

        *这里是代码*

         //this is the div 
         <div id = "<?php echo $user; ?>1" onclick="setCookie(this.id)" ><div>My Content this will hide/show</div></div>
        
        
        function setCookie(div_id)
           {
        var value = ''; 
        var x = document.getElementById(div_id); 
        var x = $('#'+div_id).next().css('display'); 
        if(x == 'none')
        {
            value = 'block'; 
        }
        else
        {
            value = 'none';
        }
        console.log(div_id+"="+value+"; expires=15/02/2012 00:00:00;path=/")
        //alert(x); 
        document.cookie = div_id+"="+value+"; expires=15/02/2012 00:00:00;path=/";
        
           }
        
        
            function getCookie(div_id)
            {
        console.log( div_id ); 
          var i,x,y,ARRcookies=document.cookie.split(";");
        for (i=0;i<ARRcookies.length;i++)
         {
          x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
          y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
          x=x.replace(/^\s+|\s+$/g,"");
        if (x==div_id)
        {
           return unescape(y);
           }
          }
        }
        
         function set_status()
         {
        
        var div_id = ''; 
        
        for(var i = 1; i <= 9 ; i++)
        {
            div_id = '<?php echo $user; ?>'+i; 
        
        
            if(getCookie(div_id) == 'none')
            {
        
                $('#'+div_id).next().css('display','none'); 
            }
            else if(getCookie(div_id) == 'block') 
            {
                $('#'+div_id).next().slideDown(); 
            }
        
        }
        
        }
        
        $(document).ready(function(){
            get_status();
         });
        

        【讨论】:

          【解决方案5】:

          看看 JavaScript Cookie 方法,您可以保存 div 的当前状态,并在用户返回站点时恢复它。 有一个很好的 jQuery 插件来处理 Cookies (http://plugins.jquery.com/project/Cookie)

          希望对你有帮助

          【讨论】:

            【解决方案6】:

            【讨论】:

              猜你喜欢
              • 2014-05-17
              • 1970-01-01
              • 2013-07-27
              • 2012-02-06
              • 2010-12-04
              • 1970-01-01
              • 1970-01-01
              • 2013-07-08
              • 1970-01-01
              相关资源
              最近更新 更多