Как передать переменную JavaScript в PHP и наоборот?
На форумах очень часто можно встретить вопросы вроде:
Как передать переменную в JavaScript из PHP? или Как передать данные из PHP в JavaScript?
Эти вопросы выдают новичков и сейчас я постараюсь объяснить почему. А также ответить как же все-таки это сделать.
Почему вопрос о передаче переменной из языка в язык — вопрос новичка? Потому что невозможно это сделать! Языки программирования работают каждый самостоятельно. А передача напрямую между ними невозможна. Сейчас объясню почему.
Дело в том, что PHP и JavaScript связаны лишь условно. PHP работает на сервере, а JavaScript — в браузере.
Напомню алгоритм работы интернета. То есть, что происходит, когда вы запрашиваете адрес. Например, что должно произойти чтобы выполнилась JavaScript функция на странице http://dayte2.com.
- Браузер формирует заголовки запроса, присоединяет к в них какую-то важную информацию о себе и отсылает их на этот адрес.
- Сервер принимает заголовки и понимает что нужно отдать документ. Он понимает, что запрашивается не документ, а программа. Тогда он запускает эту программу и отдает ей все данные, что получил от браузера.
- Программа (php-скрипт) запускается, отрабатывает и просто печатает результат своей работы. Результатом работы может быть html-страница, куда включены JavaScript-скрипты. Но мы помним, что в данный момент работает PHP и JavaScript для него ничем не отличается от любых других данных. Просто буковки.
- Сервер получает то, что напечатала программа. Прикрепляет заголовки ответа и отсылает все это запросившему браузеру.
- Браузер получает код страницы и отображает его. Догружает нужные файлы (js, css, картинки), применяет их к html-коду. И только теперь включается JavaScript, встроенный в браузер.
Если посмотреть внимательно на этот порядок работы, можно ответить на вопрос
Как передать переменную из PHP в JavaScript?
Нужно во время выполнения скрипта PHP просто сформировать такой текст, чтобы он потом мог выполниться в браузере. Например.
alert("'.$var.'"); ?>
Если вы создадите файл php с таким содержимым и запустите его из браузера — вы увидите пустую страницу и сообщение alert.
Разумеется, нужно помнить, что синтаксис должен быть JavaScript. Фактически, когда мы формируем код JS на PHP — мы должны помнить, что сначала php что-то сгенерирует и это что-то должно быть валидным JS.
В данном случае наш php-скрипт формирует строку:
А это — вполне корректный JavaScript, который будет выполнен браузером.
Как передать переменную из JavaScript в PHP?
Можно догадаться, тут дела обстоят труднее. Ведь php генерирует JS, а вот обратная связь не подразумевается особо. Так что хочешь-не хочешь, а придется формировать новый запрос к серверу, передавая в нем данные для скрипта. У нас есть два основных метода передачи данных. Реализация может быть как через синхронные, так и через асинхронные запросы. Синхронные вызовут перезагрузку страницы, а асинхронные используют Ajax.
Синхронный метод передачи данных в php из JavaScript
Этот код немедленно перенаправит пользователя по адресу http://dayte2.com/index.php?message=Hello%2C%20server!
PHP-код в файле index.php получит данные из GET и сформирует суперглобальные массивы.
Асинхронная передача переменной из JavaScript в PHP
Это подразумевает использование Ajax. По сути, осуществляется то же, что и в предыдущем случае, но не перезагружается страница браузера. Проще всего это проиллюстрировать используя библиотеку jQuery.
Как видим, все еще проще. Не нужно применять функцию encodeURIComponent, ее применяет за нас jQuery. Мы описываем функцию, которая принимает ответ сервера и складывает его в переменную data. Если index.php возвращает просто значение переменной $_GET[message], то мы увидим alert с текстом «Сервер ответил: Hello, server!».
Передача сложных объектов из php в Javascript
Мы помним, что при генерации JavaScript из php, нужно придерживаться синтаксиса JavaScript. Поэтому нужно перевести данные из представления PHP в представление JavaScript. Проще всего это сделать, воспользовавшись форматом JSON и функцией json_encode(), которая превратит объект или массив php в строку, которая при выполнении движком JavaScript, даст объект JavaScript.
'123','key'=>'value'); $js_obj = json_encode($arr); print ""; ?>
Тут можно начать путаться. Но ничего страшного нет. Достаточно помнить последовательность. Сперва выполняется php, затем — JavaScript. После выполнения php получится:
Что при выполнении выведет нам alert с текстом ‘123’.
Итого
Нужно помнить что php генерирует JS, поэтому передавать из него данные довольно просто. Нужно формировать JS так же, как формируется html. С соблюдением синтаксиса JavaScript.
Для передачи данных из JS в PHP всегда используется дополнительный запрос. Как он осуществляется — дело десятое. Например, может формироваться и отправляться форма. Или открываться iframe. Но суть остается. Понимая эту суть, можно перекидывать любые данные из браузера на сервер и обратно довольно просто.
- Получение контента с чужого сайта Ajax-ом
- Сниппет для MODx импорт RSS
- Домены .рф
- Способы определения четности и быстродействие Perl php
- Грабим погоду с Gismeteo.ru
- Новый скрипт для скачивания музыки вконтакте
- Делаем классную ленту изображений с автопрокруткой
- Выбор пунктов из таблицы на JS
Как передать значение из php в js
Покинул форум
Сообщений всего: 34
Дата рег-ции: Март 2013
Помог: 0 раз(а)
Почему-то все предлагают передавать переменную из JS в PHP методом GET или POST, AJAX’сом и прочей безобразиной с перезагрузками страниц и т.д.
И почему-то нигде нет простого метода без всяких там плясок с бубном
CODE (htmlphp):
скопировать код в буфер обмена
var name = «Юрий» ;
$name = «?> < script >document . write ( name ) script > php ";
Единственная загвоздка, $name подхватывает закрытие кода php и выводит ?>Юрий, исправляем
CODE (htmlphp):
скопировать код в буфер обмена
echo substr ( $name , 2 ) ;
И получаем простую передачу переменной из JS в PHP без перезагрузок и прочей мути.
Почему никто не показывает такой вариант? Религия не позволяет?
(Отредактировано автором: 31 Октября, 2013 — 16:57:06)
Отправлено: 31 Октября, 2013 — 17:03:24
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008
Откуда: из города
Помог: 90 раз(а)
Что будет если передавать в $name объект или массив?
Отправлено: 31 Октября, 2013 — 17:03:57
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012
Откуда: Украина, Львов
Помог: 127 раз(а)
Ubuntu пишет:
И получаем простую передачу переменной из JS в PHP без перезагрузок и прочей мути.
Почему никто не показывает такой вариант? Религия не позволяет?
А теперь сделайте так, чтобы когда я жмякнул кнопочку like, например, произошла запись в базу. Слабо .
Отправлено: 31 Октября, 2013 — 17:42:27
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011
Откуда: .kh.ua
Помог: 242 раз(а)
А можно для тех кто уже 7 часов сидит перед компом в глубокой отладке и не понимает как это работает объяснить где здесь передача данных из JS(на клиенте) на сервер происходит?
Максимум — кривой вывод кода, который потом на клиенте выведет какие-то данные.
громкое название темы
Цитата:
Мой вариант передачи переменной из Javascript в php
Свидетельствует о полном непонимании ТСом сути происходящего(на банальном примере: хочу из PHP вывести js переменную name большими буквами), и позволю себе ответить на поставленные автором вопросы(особонно про религию — в моем стиле)
Ubuntu пишет:
Почему никто не показывает такой вариант? Религия не позволяет?
Потому, что это криво(торчит ?>, нужно еще и удалять, зачем? почему бы просто не вывести html код содержащий скрипт тег сразу? зачем этo открытие/закрытие php? зачем это вообще в переменную пхп запихивать, а не сразу в документ?), тупо(я привык подключать скрипты в конце страницы) и вообще никак не передает строки в пхп(не соответствует топику). Религиозные взгляды тут точно не при делах, я атеист.
(Отредактировано автором: 31 Октября, 2013 — 17:47:28)
Отправлено: 31 Октября, 2013 — 17:59:33
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008
Откуда: из города
Помог: 90 раз(а)
Наверно, всё таки он хотел показать передачу переменной из PHP в JS.
Отправлено: 31 Октября, 2013 — 18:02:32
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012
Откуда: Украина, Львов
Помог: 127 раз(а)
Успокойтесь, потролил человек явно
Отправлено: 31 Октября, 2013 — 18:02:33
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011
Откуда: .kh.ua
Помог: 242 раз(а)
Ch_chov, да нет. Судя по первой строке сообщения — из JS в php.
(Добавление)
esterio, да лан. Ждем ответа. Вдруг мессия откроет нам глаза еще на несколько путей праведных
upd. Заметил автора читающим тему, но он ушел. Открыли глаза или накормили?
(Отредактировано автором: 31 Октября, 2013 — 18:36:40)
Отправлено: 31 Октября, 2013 — 21:55:03
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Ubuntu пишет:
Почему никто не показывает такой вариант? Религия не позволяет?
Гениально.
Взял на вооружение. Буду пользоваться.
——
Чем больше узнаю, тем больше я не знаю.
Отправлено: 31 Октября, 2013 — 22:03:29
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011
Откуда: Москва
Помог: 221 раз(а)
Ubuntu пишет:
Почему никто не показывает такой вариант?
При грамотной архитектуре совершенно нет нужды так извращаться.
Отправлено: 01 Ноября, 2013 — 07:24:45
Покинул форум
Сообщений всего: 20
Дата рег-ции: Февр. 2013
Помог: 0 раз(а)
Не понимаю, если есть тот же Ajax, зачем (как уже написали выше) использовать различные извращения?(К тому же код не будет корректно работать, а при работе с разными файлами (к примеру JS в одном файле, а PHP в инном) оно вообще не будет работать)
Отправлено: 01 Ноября, 2013 — 08:30:17
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 617 раз(а)
IllusionMH пишет:
А можно для тех кто уже 7 часов сидит перед компом в глубокой отладке и не понимает как это работает объяснить где здесь передача данных из JS(на клиенте) на сервер происходит?
Вечером подумал о том же самом — тут что-то не так. А вот что — не понял.
Наутро всё стало ясно, и почему что-то выводит и почему — это лишь видимость.
Uncaught ReferenceError: header is not defined

Как передать переменную из яваскрипта в PHP? Точно так же, как и любые другие данные — послав запрос на сервер. Но надо четко понимать, что во время выполнения php скрипта получить что-либо из яваскрипта, разумеется, невозможно. Передать можно будет только при следующем запросе. И обрабатывать его будет уже другой PHP скрипт. Если надо по событию onClick обратиться к базе данных, то следует помнить, что она находится на сервере. То есть, надо запрашивать сервер, который запустит PHP скрипт, который обратится к базе, получит от неё ответ и передаст его в браузер.
Все вышеизложенное не противоречит, разумеется, модной технологии асинхронного общения браузера с сервером. Все методы остались те же, просто общение с сервером выполняет не сам браузер, а программа на яваскрипте. Подробнее можно почитать на ресурсах, посвященных яваскрипту. С точки зрения PHP запросы по технологии AJAX ничем не отличаются от обычных.
deep-purple ★★★★★
( 18.03.16 17:10:16 MSK )
Ответ на: комментарий от deep-purple 18.03.16 17:10:16 MSK
И что это значит
KRex ★
( 18.03.16 17:13:52 MSK ) автор топика
Ответ на: И что это значит от KRex 18.03.16 17:13:52 MSK

Давай еще раз попробуй нормально задать свой вопрос.
deep-purple ★★★★★
( 18.03.16 17:14:45 MSK )
Ответ на: Uncaught ReferenceError: header is not defined от KRex 18.03.16 16:59:32 MSK

Взоржал с этого.
Llevellyn ☆
( 18.03.16 17:22:48 MSK )

не занимайся ерундой, а найми программиста
Как передать переменную из Javascript в PHP
Так уж получилось, что по роду деятельности мне приходится отвечать как на сложные технические вопросы, так и на откровенно нубские. Что поделать, уровень подготовки разных специалистов разный.
Спросили: «Как передать переменную из Javascript в PHP». Ответ на этот вопрос хотелось бы начать с того, что Javascript и PHP выполняются на разных физических машинах, а это значит, что просто так «передать переменную», в обычном понимании этого процесса, не получится.
Поскольку Javascript выполняется на клиентской машине (клиенте), а PHP на серверной (сервер), то назовём передачу данных между Javascript и PHP термином «клиент-серверный обмен», так будет правильнее.
В web обмен данными производится по следующей схеме: на сервер передаётся запрос с клиента, этот запрос обрабатывается сервером, после чего он возвращает на клиент некоторые данные (ответ). Этот способ обмена использует и сам браузер. Тот URL, который вы забиваете в строку адреса — и есть запрос. А ответом является HTML, который выводится на странице браузера.
Однако данные с сервера должен запрашивать не обязательно сам браузер. Ваш код на Javascript, который крутится на страничке, также может выступить в роли клиента. Для этого используют встроенный компонент браузера XMLHttpRequest, который сам по себе может производить запросы на сервер и получать от него ответы, при этом сама HTML-страница не обновляется и вообще никак не меняется.
Работа с сервером через объект XMLHttpRequest часто называется более популярным словом — AJAX.
Однако работать напрямую с этим объектом я лично не рекомендую. Дело в том, что на разных браузерах он работает немного по-разному, и это нужно будет учитывать в коде. Кроме того, «чистый» Javascript не имеет удобных средств работы с событиями, так что у вас получится приличная «портянка» кода, который ещё и будет «глючить» скорее всего.
Поэтому я рекомендую использовать отработанное решение, обкатанное годами — это библиотека jQuery.
Код с использованием этой библиотеки получается достаточно простым и лаконичным. например, если вам нужно передать значение v=6789 на сервер, то можно выполнить следующий код
jQuery.get('/index.php?v=6789', function(result)< alert(result); >);
При этом ваш скрипт по адресу /index.php получит значение в переменной $_GET[‘v’]. А всё, что он выведет в выходной поток (например, с использованием echo), попадёт в переменную result и будет выведено в всплывающий диалог alert().
Как видите, всё просто.
Можно аналогичным образом отправлять данные через POST, а также отправлять закодированные в JSON данные (наиболее часто используемый способ), но об этом я рекомендую вам прочесть самостоятельно в документации от jQuery (смотрите методы .ajax(), .post()).
