【问题标题】:Access PHP $_SESSION using AJAX使用 AJAX 访问 PHP $_SESSION
【发布时间】:2018-07-27 11:47:48
【问题描述】:

我尝试使用 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>

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

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

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 开发人员,我无法让这段代码工作。我在网上也没有找到(我自己还不会写这种代码,有点紧迫)。

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

【问题讨论】:

  • 你卡在哪里了?看起来你的代码还没有完成。您需要将session 的内容分配给某个dom 元素。 (例如document.getElementById('someid').textContent = session;)并且您需要反复发出ajax请求。 (例如setInterval
  • @RolandStarke 我已将整个 javascript 包含在 setInterval(function(){ ... }, 3000); 中,并在函数中添加了 document.getElementById('someid').textContent = session;,并在主体内添加了 &lt;h1 id='someid'&gt;&lt;/h1&gt;,但它仍然不起作用。我做错了什么?
  • 您能否指定“不工作”您可以看到使用 F12 打开开发者工具的错误。

标签: php jquery ajax session dashboard


【解决方案1】:

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

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

然后在js中以这样的间隔刷新值:

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

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

编辑:显然,@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);

【讨论】:

  • 谢谢!使用你的解决方案除了谷歌,我终于可以让它工作了! :D
  • 最佳实践是不要将setInterval 与ajax 一起使用。请改用递归的setTimeout。如果您在使用 setInterval 时在 ajax 调用中出现超时或延迟,您的浏览器会受到反作用,而您自己会这样做。
  • @DanFromGermany 谢谢先生!也感谢您分享您的想法!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 2020-10-13
  • 2011-10-12
相关资源
最近更新 更多