繁体   English   中英

使用AJAX / PHP无法多次增加会话变量

[英]Cannot increment session variable more than once using AJAX/PHP

我尝试了几种尝试多次更新该会话变量的方法(即,使每次单击而不是第一次单击都增加),但是它不起作用。

<script>
$(document).ready(function(){
    $('.nextWeek').on('click', function(){
        $.post ('incrementWeek.php', function (response) {
            location.reload();
        });

        location.reload();
    });
});
</script>

我试图增加$ _SESSION ['idn']变量,以便在单击某个按钮/链接后再次使用。 “ incrementWeek.php”很简单:

<?php
    session_start();
    $session = $_SESSION['idn'];
    $session++;
    $_SESSION['idn'] = $session;
?>

几个常见问题的快速答案很少:session_start()是第一个PHP标记下的第一件事,$ _SESSION ['idn']变量在文件中进行了较早的设置,但是我使用了如下if结构:

if (isset($_SESSION['idn'])) {

}

else {
    $id = getIDFromDate($connection, $currentSunday);
    $_SESSION['idn'] = $id;
}

我尝试使用警报来查看变量是否更改,但它保持不变。 加载第一页后,AJAX(我想是?)甚至都不承认我在单击“ nextWeek”类按钮。 该页面未重新加载,意味着location.reload()未执行。

任何想法表示赞赏。

编辑:谢谢。 我已经从每个人的反馈中编辑了上面的代码,现在它根本不会重新加载页面,并且$ _SESSION变量不会更新。 语法上有问题吗?

$_SESSION['idn']++不正确。 您应该这样做:

$session = intval($_SESSION['idn']);
$session++ ;
$_SESSION['idn'] = $session;

设置会话变量需要在它的值设置后重定向。

按照这种逻辑,因为您正在使用ajax调用设置会话,所以您将无法在服务器端重定向到任何url,因此不会设置会话变量。

我认为您的需要是出于某些目的在某处重用链接点击数,您可以在此处作为替代解决方案,在同一ajax服务器端php文件(即increasureWeek.php)中设置点击数,但不使用会话而是尝试在PHP中使用Cookie

您的代码应为:

<script>
$(document).ready(function(){
    $('.nextWeek').on('click', function(){
        $.post ('incrementWeek.php', function (response) {
            location.reload();
        });

       // location.reload(); // <-- remove this as it is not required
    });
});
</script>

<?php
   session_start();
   if(isset($_SESSION['idn']))
   {
     $_SESSION['idn'] = $_SESSION['idn'] + 1;
   }
?>

要在javascript中使用php,您需要打开php

 <script>
  $(document).ready(function(){
    $('.nextWeek').on('click', function(){
    // dont do this 
     <?php  $_SESSION['idn']++; ?>
     // instead use a ajax 
      $.ajax({
    url: '/path/to/file',
    type: 'GET',
    data: {"session_increment":1},
    success:function(response){
        if(response==1)
        {
            location.reload();
        }
       }
     });
    });
   });

这将起作用,并将增加值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM