Загрузка PHP через XMLHTTPRequest не разделяет одну и ту же область видимости переменных - PullRequest
0 голосов
/ 08 июня 2018

Я понимаю концепцию глобальных переменных в 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
?>

Main.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>

PHP1.html:

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

PHP2.html:

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

Вопрос в том, как загрузитьPHP в div и «видеть» и работать с переменными в области main.html?

С уважением

Карстен

1 Ответ

0 голосов
/ 11 июня 2018

Я решил эту проблему, не загружая PHP1 и PHP2 через JS, но ранее запустил движок PHP.Вместо того, чтобы загружать PHP в один и тот же DIV, я теперь загружаю их в разные DIV s.Затем видимость этих DIV s контролируется через JS.

Переменная $LastScreen извлекается из базы данных SQL и содержит последний показанный экран, так что пользователь получает тот же экрандо того, как он перезагрузил страницу.

Генерация DIV s:

<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>

С уважением

Карстен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...