изменить переменную php с помощью ajax

У меня есть php-переменная:

Код PHP:

$php_value = 'Am from PHP'; 

И я хочу, чтобы изменить эту переменную с помощью jQuery, и jQuery находится на одной странице?

Вы не можете.

К моменту, когда страница была доставлена ​​в браузер и запущен JavaScript, программа PHP, которая сгенерировала страницу, закончит работу, и эта переменная больше не будет существовать.

JavaScript позволит вам отправлять новые данные на сервер (Ajax), где сервер может хранить данные где-то (обычная база данных) и читать ответ.

JavaScript также позволит вам изменить страницу в браузере (DOM) (в том числе с данными, включенными в ответ на запрос Ajax).

PHP-код запускается на стороне сервера, а jQuery запускается на клиенте. Способ обновления переменной PHP из jQuery состоит в том, чтобы иметь вызов jQuery, который отправляется на страницу PHP, и PHP ищет его:

 $php_value = 'Am from PHP'; if exists($_POST['php_value_from_jquery']) { $php_value = $_POST['php_value_from_jquery']; } 

Если я правильно понимаю ваш вопрос, AJAX не может отправлять данные на PHP-код на той же странице. Мне сказали, что это возможно, но это не тривиально, но я не могу представить, как это возможно. Во всяком случае, AJAX легко, если используется дополнительный PHP-файл.

Вот пример того, что я имею в виду. Если вы попробуете это:

 <?php echo 'Hello'; ?> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $.ajax({ type: 'POST', url: '', success: function(data) { alert(data); } }); }); //END $(document).ready() </script> </head> <body> </body> </html> 

Всплывающее окно будет содержать HTML для страницы.


Однако, если вы используете два файла:

file1.php

 <?php echo 'Hello'; ?> 

file2.php

 <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $.ajax({ type: 'POST', url: 'file1.php', success: function(data) { alert(data); } }); }); //END $(document).ready() </script> </head> <body></body> </html> 

Всплывающее окно будет содержать только слово «Hello».

Чтобы использовать ajax, вы должны вызвать внешний PHP-файл.


После рассмотрения выше отметим, что ответ Квентина важен – даже если вы используете AJAX для установки переменной PHP на сервере, эта переменная исчезает после завершения AJAX – так же, как все переменные PHP исчезают после завершения вашего index.php рендеринга DOM и представления его в браузер посетителя.

Итак, что делать? Два варианта.

(1) Как указывает Квентин, вы можете хранить значения постоянно в базе данных или

(2) Вы можете использовать суперглобальный PHP, такой как переменная $_SESSION . Например:

Клиентская сторона: file2.php

 var storeme = "Hello there"; $.ajax({ type: 'POST', url: 'file1.php', data: 'stored_on_server=' +storeme, success: function(data) { alert(data); } }); 

file1.php

 <?php session_start(); $SESSION['a_variable_name'] = $_POST['stored_on_server']; 

Вы можете впоследствии получить это значение переменной таким образом:

 $.ajax({ type: 'POST', url: 'file3.php', success: function(data) { alert(data); //a popup will display Hello There } }); 

file3.php

 <?php session_start(); echo $SESSION['a_variable_name']; 

Вы не можете изменить значение php с помощью javascript. т.е. сценарии сервера запускаются сначала после того, как этот скрипт на стороне клиента вступит в силу в этом случае, вы не можете изменить его, поскольку они уже отображаются в браузерах

Если jQuery будет обрабатывать данные, вы можете назначить переменную PHP переменной jQuery следующим образом:

 <script> var jquery_value = <?php echo $php_value; ?> </script> 

Насколько я знаю, поскольку jQuery является клиентской, а php – серверной, невозможно переопределить переменную jQuery для PHP.