Как мне убедиться, что переменная PHP доступна в index.php после изменения во втором файле php (с помощью jQuery load())?

#php #jquery #variables

#php #jquery #переменные

Вопрос:

В моем index.php у меня есть следующий код jQuery для ответа на нажатие на изображение:

 <script>
    $(document).on('click',".i-give-up", function() {
        $("#take-a-guess").load("get_snippet.php");

        [...snip...]

        generate_HSK2_circle(<?php echo $answer_data["HSK2level"]; ?>);
    });
</script>
  

Когда я нажимаю на изображение, оно загружается get_snippet.php , которое выполняет и обрабатывает запрос MySQL. Более того, если я добавлю

 echo "<script>console.log('get_snippet[new] HSK2 level: " . $answer_data["HSK2level"] . "' );</script>";
  

в конце get_snippet.php я вижу правильную переменную для $answer_data["HSK2level"] в get_snippet.php .

Проблема в том, что переменная $answer_data["HSK2level"] в index.php не изменяется в результате загрузки get_snippet.php .

Вопрос: Как мне убедиться, что переменная PHP доступна в index.php после изменения во втором файле php (с помощью jQuery load())?

Комментарии:

1. Поскольку php существует только на сервере, а страница уже находится в браузере, где работает только js, трудно сказать, действительно ли вы хотите иметь возможность обновлять переменную js для следующего click или вам действительно нужно сохранить эти новые данные на стороне сервера для последующего использования при загрузке страницы. Я предполагаю, что это связано с запуском generate_HSK2_circle(() с новой переменной, которая должна быть переменной js

2. Я только хочу обновить переменные JavaScript. На самом деле, все, что я хочу сделать, это вызвать функцию generate_HSK2_circle(...) , которая рисует круг , который изменяется с $answer_data["HSK2level"] .

3. Ok…my в ответе делается такое предположение

Ответ №1:

Мне кажется, что вы на самом деле хотите сохранить значение php $answer_data["HSK2level"] в переменной javascript, поэтому при каждом вызове generate_HSK2_circle() вы передаете самое текущее значение

Обратите внимание, что ajax также является асинхронным, поэтому вам необходимо использовать полный обратный вызов, прежде чем продолжить работу с новыми данными

Для этого ваш js будет выглядеть следующим образом:

 <script>
    // new js variable recieves value on page load from php
    var answer_data = <?php echo $answer_data["HSK2level"]; ?>;

    $(document).on('click',".i-give-up", function() {
        // use complete callback of load to assure new data loaded
        $("#take-a-guess").load("get_snippet.php", function(){
          // new data has loaded
          [...snip...]
          // use the js variable in function call
          generate_HSK2_circle(answer_data);
        });

       
    });
</script>
  

Затем в вашем новом теге скрипта (из load) обновите это значение переменной js

 echo "<script>answer_data=". $answer_data['HSK2level']. "</script>";
  

Если этот новый тег сценария является единственными данными, отправляемыми с сервера в load() , более подходящим подходом было бы отправить json и использовать $.getJSON и вручную обновить переменную js из объекта ответа

Ответ №2:

index.php Файл не изменится после того, как он уже будет отрисован, если только PHP не будет обработан на сервере.

Чтобы передать эти данные, вы можете рассмотреть возможность использования строки запроса и перенаправления обратно на index.php с переменной get.

https://www.php.net/manual/en/reserved.variables.get

Затем в вашем get_snippet.php вы бы направили к index.php?answer=... и извлекли его через htmlspecialchars($_GET["answer"])