【问题标题】:php global variable not updatingphp全局变量不更新
【发布时间】:2015-03-06 21:49:10
【问题描述】:

我是 php 和 ajax 的新手。我有一个“test3.php”文件,我在其中对另一个 php 文件“test2.php”进行了 ajax 调用。在 test2.php 中有一个全局变量,以及一个改变全局变量值的简单函数。

一旦 ajax 请求完成,我会回显返回的数据,这是一个全局变量,以确保它的值确实发生了变化。但是,当我用 php 警告这个全局变量时,它的值不会更新。

test3.php:

<?php 
include('test2.php');
?>
<html>


<body>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">
        $.post('test2.php', { action: 'u', file:'file'},
               function(data){
            alert(data);
            alert('<?php echo $global_var; ?>');
        });
    </script>
</body></html>

test2.php:

<?php 
$global_var = "unchanged";

if(isset($_POST['action'])){
    if($_POST['action'] == 'u'){
        setValue();
        echo $global_var;
    }
}

function setValue(){
    global $global_var;
    $global_var = "changed";
}

?>

如果我运行 test3.php,第一个警报返回“已更改”,第二个警报返回“未更改”。为什么会发生这种情况?任何帮助将不胜感激!

【问题讨论】:

  • 看到以这种方式处理的变量总是让我畏缩
  • @JohnConde 就像是盗梦空间!

标签: php jquery ajax


【解决方案1】:

您正在从服务器端代码输出客户端代码。

第二个警报总是会输出 PHP 执行时 $global_var 设置的值。 (在客户端$.post被执行之前。)

您对第一个警报执行此操作的方式通常是您想要取回数据的方式。

如果这不是 ajax 请求,而是您直接发布到 PHP 并从服务器接收完整页面刷新,则第二个警报将起作用。

【讨论】:

  • 所以 '$global_var' 的值确实发生了变化,对吗?
  • 只在ajax请求范围内。 Test3 中的变量在第一次处理后就固定下来了。您从 javascript 输出中引用的任何变量都将是它们最初运行时的样子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多