У меня есть 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.