通过 XMLHTTPRequest 加载 PHP 不共享相同的变量作用域



我了解PHP中全局变量的概念,并了解使用全局变量的优缺点。尽管如此,我还是决定使用它们,但我遇到了有关它们的范围和可见性的问题。

情况:

根据菜单的选择,我将不同的 PHP 加载到div 中。PHP 需要相同的通用数据集,我希望避免为每个 PHP 重新加载并始终保存在内存中。在下面的示例中,GlobalVars.php将在内存中保留两次,并且还将从数据库中获取数据两次。

问题是,通过将它们加载到div 中,它们不共享main.html的范围。GlobalVars.php中的全局变量可以通过another.php中的代码看到和访问,但在PHP1.php中不能,也不能在PHP2.php中查看和访问。

GlobalVars.php:

<?php
$var1 = "*";
$var2 = 5;
// Various SQL fetches
?>

主.html:

<?php require_once="./GlobalVars.php"; ?>
<?php require_once="./another.php"; ?>
<script>
function LoadHTML(href) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", href, false);
xmlhttp.send();
return xmlhttp.responseText;   
}
switch(menuitem) {
case 0: break;
case 1: document.getElementById("contentdiv").innerHTML=LoadHTML("./PHP1.php") break;
case 2: document.getElementById("contentdiv").innerHTML=LoadHTML("./PHP2.php") break; break;
case 3: break;
default:
}
</script>

菲律宾比索1.html:

<?php
require_once="./GlobalVars.php";
// code ...
?>

菲律宾比索2.html:

<?php
require_once="./GlobalVars.php";
// code ...
?>

问题是,如何将 PHP 加载到div 中并"查看"并使用main.html范围内的变量?

问候

卡斯滕

我解决了这个问题,不是通过JS加载PHP1和PHP2,而是在PHP引擎运行的早期。我现在不再将 PHP 加载到同一个DIV而是将它们加载到不同的DIV中。然后,这些DIV的可见性稍后将通过JS进行控制。

变量$LastScreen是从 SQL 数据库中提取的,并包含显示的最后一个屏幕,以便用户获得与重新加载页面之前相同的屏幕。

DIV的生成:

<html>
<body>
<div class="myclass" id="screen1"
<?php if (strcmp($LastScreen, "screen1") !== 0) {echo " style="display:none; "";} ?>
>
<?php require_once './PHP1.php'; ?>
</div>
<div class="myclass" id="screen2"
<?php if (strcmp($LastScreen, "screen2") !== 0) {echo " style="display:none; "";} ?>
>
<?php require_once './PHP2.php'; ?>
</div>
</body>
</html>

在 JS 中切换屏幕:

<script>
function SwitchScreen (screen){
var arr = document.getElementsByClassName('myclass');
var i;
for (i=0; i < arr.length;i++) {
arr[i].style.display = "none";
}
document.getElementById(screen).style.display = "inline";
// push screen name to SQL
// ...
}
</script>

问候

卡斯滕

相关内容

  • 没有找到相关文章

最新更新