使用 AJAX 访问 PHP $_SESSION

Access PHP $_SESSION using AJAX

我尝试使用 AJAX 在 PHP 的 $_SESSION 变量中输入和检索数据。

这是我的场景:

笔记本电脑正在浏览保存在 srv-web 服务器上的 admin.php 网页。此服务器 (raspberry PI) 本身插入用作仪表板的大屏幕,网页 index.php (localhost) 显示在屏幕上。

Hello World 消息存储在 $_SESSION['msg'] 变量中。 admin.php 中的表单使用用户输入作为值

来提供该变量

admin.php

<?php 
session_start();
if (isset($_POST['msg'])) { 
$_SESSION['msg'] = $_POST['msg']; 
echo $_SESSION['msg'];
}
?>
<form action="admin.php" method="post">
<input type="text" name="msg" />
<input type="submit" />
</form>

到目前为止,仪表板使用 <META http-equiv="refresh" content="3; URL=index.php"> 刷新管理员笔记本电脑发送的消息。

由于无法在网页上刷新某些数据,因此无法再使用此解决方案。我考虑过使用 ajax 除了 PHP 来让这个设置工作。这是我目前所拥有的:

index.php

<?php session_start(); ?>
<html>
<head>
<script type="text/javascript" src="jquery-3.3.1.min.js"></script>
</head>
<body>
<script type="text/javascript">
    var session;
    $.ajaxSetup({cache: false})
    $.get('getsession.php', function (data) {
        session = data;
    });
</script>
<?php echo $_SESSION['msg']; ?>
</body>
</html>

getsession.php

<?php
session_start();
print json_encode($_SESSION['msg']);
?>

如您所料,我不是 javascript 开发人员,我无法使此代码正常工作。也没有我在 Internet 上找到的(我还不能自己编写这种代码,这有点紧迫)。

谁能帮我从 $_SESSION['msg'] 中检索数据并在不刷新的情况下显示它 index.php ?

您必须像这样创建一个输入:

<input type="text" id="yourVal" value=""></input>';

然后在js中每隔一段时间刷新一次值,像这样:

setInterval(function(){
    $.get('getsession.php', function (data) {
       document.getElementById("yourVal").value=data;
    });
}, 200);

我不知道你的 JSON 长什么样,所以我无法展示如何正确获取数据值

Edit :显然,@DanFromGermany 指出超时是一种更好的做法。以下是您可以采取的措施,以确保您不会被卡住

var interval = 1000; // 1 sec
var keepGoing = true;
function execAjax() {
$.ajax({
        type: 'GET',
        url: 'session.php',
        dataType: 'json',
        success: function (data) {
            document.getElementById("yourVal").value=data;
        },
        error:{
           keepGoing=false;
        },
        complete: function (data) {
            // Schedule the next
            if(keepGoing==true){
                setTimeout(execAjax, interval);
            }
        }
    });
}
setTimeout(execAjax, interval);