使用ajax设置PHP会话变量

时间:2017-10-23 17:13:18

标签: javascript php jquery ajax session

想要更改SESSION变量的值" fullname"没有刷新页面。

我使用ajax实现:

Page 1 html:

<input type="text" name="fullname" id="fullname" placeholder="Full name">

<button onclick="setSession()"> GO </button>

第1页脚本:

<script>
function setSession(){
   var fullname = $("#fullname").val();
   var dataString = 'fullname=' + fullname;

   $.ajax({
        type: "POST",
        url: "Page2.php",
        data: dataString,
        cache: false,
        success: function( data ) {
             if(data === 'True'){
                 alert("<?php echo $_SESSION['fullname'];?>");
              }
            }
        });
      }
</script>

在第2页:

session_start();
$_SESSION["fullname"] = $_POST["fullname"];
echo 'True';
exit();

它不会改变会话变量的值。

两个页面都有session_start()。

4 个答案:

答案 0 :(得分:2)

首先,have you watched the AJAX request / response in the browser's developer tools? Have you included the jQuery library in the project? Are there any errors reported? Are you running this on a web-server?

其次,您正在远程页面中启动会话。在重新加载当前页面之前,该会话数据将无法在当前页面中使用。另外,你的警报中有一些不稳定的引用,它应该是:

alert("<?php echo $_SESSION['fullname'];?>");

答案 1 :(得分:1)

您的代码应该已经在更改PHP会话中的值。您只是没有正确设置客户端脚本来显示。

在PHP脚本中返回某种指示符:

<?php
// Page2.php

session_start();

$_SESSION["fullname"] = $_POST["fullname"];

echo 'set session fullname to ' . $_POST['fullname'];

然后在你的AJAX成功函数中,显示响应:

...
success: function( response ) {
    alert(response);
}
...

当您在成功函数中使用alert("<?php echo $_SESSION['fullname'];?>");时,PHP将在页面加载时填写该警报框中的$_SESSION['fullname']值,并且在重新加载页面之前它将永远不会更改,即使您通过AJAX成功更新会话值。

答案 2 :(得分:0)

您正在使用PHP内联编码在JS中设置变量。但是,如果没有设置帖子,您可以在第2页中回显会话变量。如果您在没有任何帖子的情况下请求第二页,则可以使用JS中的响应主体来获取当前设置的会话变量并将其放入JS变量中。

Var name;
$.get(‘page2.php’, function(data){ name = data; } );

我正在使用iOS应用程序,因此上面的代码并不完整,但可以说明可以做些什么。

答案 3 :(得分:0)

Page 1 HTML

<input type="text" name="fullname" id="fullname" placeholder="Full name">
<button onclick="setSession()"> GO </button>

Page 1脚本

<script>
function setSession(){
   $.ajax({
        type: "POST",
        url: "Page2.php",
        data: { fullname: $("#fullname").val() },
        dataType: "json",
        cache: false,
        success: function( data ) {
             alert(data.fullname);
        }
   });
}
</script>

Page 2 PHP脚本

session_start();
$_SESSION["fullname"] = $_POST["fullname"];
echo json_encode(array('fullname' => $_SESSION['fullname']));

将服务器端和客户端脚本混合在一起通常是一个坏主意,因此请尝试分离PHP和Javascript逻辑。它们都在页面请求生命周期的不同时间/阶段执行。