会话仅在更改最后一个会话值之前存储数据一秒钟

时间:2017-08-18 05:17:29

标签: javascript php html session session-variables

单击Sort By Date Created按钮时,字符串date将传递给函数sort(),警报1(请参阅代码)将打印字符串date。 字符串date存储在第一个if语句的会话中,警报2打印date。问题是date只是暂时存储,而警报3始终会警告service,无论类型如何。如果我改变if语句的顺序,那么最后一个if语句的字符串总是存储在会话中。

<?php session_start(); ?>
<html>
<head>
  <script>

   function sort(type){

     alert('<?php echo $_SESSION['sort']; ?>');  ///ALERT 1

     if (type == 'date'){
       <?php $_SESSION['sort'] = 'date'; ?>
       alert('<?php echo $_SESSION['sort']; ?>'); ///ALERT 2
     }
     else if (type == 'cost'){
       <?php $_SESSION['sort'] = 'cost'; ?>
       alert('<?php echo $_SESSION['sort']; ?>');
     }
     else if (type == 'service'){
       <?php $_SESSION['sort'] = 'service'; ?>
       alert('<?php echo $_SESSION['sort']; ?>');
     }

     alert('<?php echo $_SESSION['sort']; ?>'); ///ALERT 3
  }

 </script>
</head>
<body>
  <input type="button" onclick="sort('date');" value="Sort By Date Created">
  <input type="button" onclick="sort('cost');" value="Sort By Cost">
  <input type="button" onclick="sort('service');" value="Sort By Service">
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您对客户端和服务器端代码之间的区别感到困惑。您基本上编写了以下代码:

alert('service');
<?php
    $_SESSION['sort'] = 'date';
    $_SESSION['sort'] = 'cost';
    $_SESSION['sort'] = 'service';
?>
if (type == 'date'){

    alert('service'); ///ALERT 2
}
else if (type == 'cost'){

    alert('service');
}
else if (type == 'service'){

    alert('service');
}

PHP不尊重您的javascript if语句。 PHP将编译成一个静态网页,这是我编写的代码的后半部分。

我觉得答案试图解释客户端和服务器端代码之间的区别对于StackOverflow来说有点宽泛和冗长,但是在那个主题上有很多资源。