0

第一篇在这里(虽然是长期读者)!

我创建了一个 setInterval 函数来检查 $_SESSION['status'] 变量,然后根据 $_SESSION 变量的值隐藏/显示某些元素。(这是我为我的班级创建的测验网站。)

我希望它可以在用户可能打开的任何选项卡上工作。因此,假设用户打开了 2 个选项卡,并且正在查看网站上的两个不同页面。当用户开始在选项卡 A 上进行测验时,选项卡 B 的 setInterval 函数应该看到 $_SESSION['status'] 变量已更改并显示/隐藏相关元素(以防止学生在测验)。当我在选项卡 A 上进行测验时,选项卡 A 隐藏/显示正确的信息。但是,选项卡 B 保持不变,直到我刷新页面然后它执行正确的操作。

如何在不刷新的情况下让选项卡 B 自行更改?

如果重要,浏览时 $_SESSION['status'] = -1,然后在进行测验时值为 0 或更高。

提前致谢!

<script>
$(document).ready(function(){

function check_login()
{
    if ("<?php echo $_SESSION['status']; ?>" >= '0')
        {
        $("#pagecontainer").hide();
        $("#quiz_msg").show();
        }

    else
        {
        $("#pagecontainer").show();
        $("#quiz_msg").hide();
        }
}

window.setInterval(check_login, 1000);

});
</script>
4

3 回答 3

2

您的 javascript 函数将包含页面加载时会话变量的值。

Javascript 不能直接访问 php 脚本或服务器变量,因为 javascript 在客户端而不是服务器上运行。

为了使这项工作,您需要使用 ajax 调用来检查会话变量,或者如果您想花哨的话,可以使用 websockets。

于 2013-08-21T17:45:18.307 回答
1

这段代码只有在 javascript 放在 html 中的某个地方才有效,我猜这是因为包含它的标签。代码第一次工作,但随后停止,所以这是你需要做的:

  1. 使用以下内容创建一个名为 get_status.php (或类似)的新 php 文件:

    回声 $_SESSION['状态'];

  2. 现在用这个替换你的javascript代码:

    $(文档).ready(函数 () {
    function check_login() {
    
        var status = 0;
    
        $.ajax({
            type: "GET",
            url: "get_status.php"
        }).done(function (msg) {
            status = msg;
            if (status >= 0) {
                $("#pagecontainer").hide();
                $("#quiz_msg").show();
            } else {
                $("#pagecontainer").show();
                $("#quiz_msg").hide();
            }
        });
    
    
    }
    
    window.setInterval(check_login, 1000);
    
    });

应该就是这样:)

于 2013-08-21T17:54:59.603 回答
0

据我所知,你不能把 PHP 代码放在 Javascript 代码中,因为第一个是服务器语言,第二个是客户端语言,所以它们在不同的时间执行。

我建议您使用 PHP 在 HTML 字段上编写 SESSION 数据,并使用 Javascript、使用类选择器或 id 选择器来读取它。

于 2013-08-21T17:42:49.577 回答