【问题标题】:javascript alert for changing php variable [duplicate]更改php变量的javascript警报[重复]
【发布时间】:2017-11-12 14:27:28
【问题描述】:

我在 php 中创建了一个 $_SESSION。它的一个值是最后一个活动标记。 我想在页面上的<div> 元素上显示戳记。

$_SESSION['LAST_ACTIVITY'] 正在更新 php 部分代码,根据控制台输出,我可以看到它已正确更改:

<?php
$action = $_POST['action'];
switch ($action) {
    case 'login':  DoLogin(); break;
    case 'logout': DoLogout(); break;
    case 'update': updateSessionActivity(); break;
    default: $errmsg_arr[] = 'Unknown action'; $errflag = true;
}

function updateSessionActivity()
{
    if (isset($_SESSION['LAST_ACTIVITY'])) {
        $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
    }
    echo "Session updated: ".$_SESSION['LAST_ACTIVITY'];
}
?>

在导航窗格选项卡之间切换、发布到 php 页面并更新 $_SESSION 参数时,使用 $ajax 从 jQuery 调用之前的 php 函数(我可以在 echo Session 更新后在网络响应中看到它正确)。

但是,ID 为“page_header_cont”的&lt;div&gt; 元素的 html 仅更新一次(我第一次切换到另一个选项卡窗格时)并且之后不再更改,尽管我继续在选项卡之间切换并看到 POST 与变量一起正常工作更新。

<div id="page_header_cont" class="page_header_cont">
</div>

<script type="text/javascript">
    $("a[data-toggle='tab']").on("shown.bs.tab", function (e) {
        $.ajax({
                url: 'loginprocess.php',
                type: 'POST',
                data: {action: 'update'},
                success: function (response) {
                    $("#page_header_cont").html(" Last activity: " + "<?php echo date('Y-m-d H:i:s',$_SESSION['LAST_ACTIVITY']) ?>");
                },
                fail: function (response) {}
        });
    });
</script>

我错过了什么,为什么 php echo 为变量返回相同的值?在几个浏览器中尝试过,认为这是某种缓存问题,甚至尝试回显 time()。相同的输出。第一次正常工作,然后停止更新。

编辑 我被要求编辑问题以指定它与应该是相同问题的问题有何不同。 我想指出一个事实,即作为重复提供的答案和问题与我的问题中的问题太不同了。 我在页面上冲浪时确实执行了 php 代码,并且我确实更改了我的变量。现在,在得到答案后,我在首页上也更改了它们,并且它们不是“硬编码”的,无论这意味着什么。

【问题讨论】:

  • 查看查看源代码。
  • 其实这是我看到问题的第一件事。源显示了第一次收到的值,之后永远不会改变。
  • 另见stackoverflow.com/questions/12498839/…stackoverflow.com/questions/7165395/…stackoverflow.com/questions/8471945/… 等。对why the php echo returns the same value for the variable? 的简短回答是它没有,PHP 被评估一次 on服务器和输出将永远硬编码到您的页面中。
  • 我正在写一个答案,但现在话题被锁定了。但是 TL;DR;是这样的:使用json_encode()让你的PHP返回一个JSON,在你身上读到success选项ajax()(你的响应现在将是一个对象)。
  • meagar,您实际上是错的,因为我明确指出每次切换标签时我都会评估 PHP。 Elias,PHP 正在返回字符串并且它工作正常。无论如何,这个问题已经得到解答,并且有所帮助。

标签: javascript php variables echo


【解决方案1】:

此行在 ajax 调用之间不会改变:

$("#page_header_cont").html(" Last activity: " + "<?php echo date('Y-m-d H:i:s',$_SESSION['LAST_ACTIVITY']) ?>"

您应该将 php 代码替换为您在 ajax 响应中收到的数据。

要设置初始值,您可以“编写”一个 javascript 变量并从$(document).ready() 中获取值;

为此,在正文的底部,您可以设置:

<script>
var myPhpVrs = {"lastActiviy" : "<?php echo date('Y-m-d H:i:s',$_SESSION['LAST_ACTIVITY']) ?>"};
</script>

然后您可以从 myPhpVrs.lastActivity 中获取初始值,并从 ajax 响应中获取任何更新。

附加说明:考虑转义 php 代码以避免 javascript 注入。

【讨论】:

  • 您答案的第一部分效果很好。我只需要更改 php 函数的输出以返回格式化字符串作为响应。关于初始值,这不是问题,因为 $_SESSION 参数的第一次初始化返回了正确的值。您仍然建议为此坚持使用 JS 变量吗?
  • 也许这需要更多思考,但我更喜欢将变量中的数据从 PHP 下载到 javascript,而不是将 php 输出硬编码到 javascript 函数中。
  • 胡安,非常感谢。已标记为答案,抱歉还不能投票
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多