Как записать переменную из PHP в JavaScript?

Это очень частый вопрос, который возникает в форуме. Возникает он от непонимания элементарных технологий у людей, которые не желают даже секунды подумать над этой проблемой... Любой человек способен самотоятельно разобраться. Но если есть вопрос то попробуем тут разобраться с ним.



Итак, есть браузер. Это программа, которая умеет html-файл показывать красиво на экране. Файл этот может быть взят браузером только из 2-х мест: из Интернета и с локального компьютера (либо сети).

Если браузер берет файлы с диска локального компьютера то этот файл может кто угодно модифицировать. Например, можно создать программу на Си или Паскале, которая запишет в html файл 1000 раз слово "привет". А потом браузер возмет файл и отобразит его на экране пользователя. Заметьте, браузеру по барабану, откуда файл возник. Его это не касается, он получает конечный html файл.

Если файл появляется из Интернета то браузер часто не знает о файле совсем ничего: ни даты, ни размера (до полного скачивания), ни настоящего имени. Если данный файл на сервере будет результатом работы какой либо программы, то данное обстоятельство тоже ником образом не заденет браузер (ему опять будет по барабану). На таком свойсте основаны скрипт-языки. Если пометить в веб-каталог на сервере php-файл, то браузер получит не его самого, а только результат работы PHP, выполнившего php-файл.

Что такое JavaScript (JS)? Это тот же html. Другими словами это некоторый набор дополнительных тегов и ничего более. Если в какой либо работающей ПХП-программе заменить echo "<b>Введите логин</b>" на echo "<script>document.write('<b>Введите логин</b>');</script>";, то данная операция никак не скажется на PHP программу. В начале у вас в файле храниться echo. При обращении пользователя к странице данная команда выполняется PHP, который отдает браузеру результат работы. Т.е. ту строку, которая была в echo. Если в строке был JS-код, получиться, что браузер получит его. Итак, что такое JS? Это, как мы выяснили, некий набор дополнительного к чистому html коду текст, который поступает в html-файле в браузер и там выполняется. Вот оно, что никто не желает понимать - PHP работает на сервере, а JS только в браузере. А что у нас в браузере? HTML код. И браузеру все равно, откуда он взялся. Браузер берет html файл и отображает его на экране, вылняя теги, а еще попутно JS-код.

Чтоже нужно, чтобы передеать в JS переменную из PHP? Прежде всего понимание, что вначале выполниться PHP, который создает html-страницу (а попутно может и JS код создать). Представьте, был у нас такой файл:


<html> <head><!-- SAPE RTB JS --> <script async="async" src="//cdn-rtb.sape.ru/rtb-b/js/779/2/12779.js" type="text/javascript"> </script> <!-- SAPE RTB END --> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> </head> <body><br><br><center><font size="1"><!--check code--></center> <script type="text/javascript"> var _acic = { 'dataProvider': 42 }; (function() { var aci = document.createElement('script'); aci.type = 'text/javascript'; aci.async = true; aci.src = '//www.acint.net/aci.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(aci, s); })(); </script> 2 + 3 = < script> a=2+3; document.write(a); < /script> </body></html>

Сделаем переменную с помощью PHP:


<html><body><br><br><center><font size="1"><!--check code--></center> <script type="text/javascript"> var _acic = { 'dataProvider': 42 }; (function() { var aci = document.createElement('script'); aci.type = 'text/javascript'; aci.async = true; aci.src = '//www.acint.net/aci.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(aci, s); })(); </script> 2 + 3 = < script> a=<? echo 2+3; ?>; document.write(a); < /script> </body> </html>

и теперь данную формулу считает PHP, а потом вставляет результат в нужное место html страницы. А то, что в результате получится объявление переменной JS программы, то просто положительный побочный эффект. PHP не волнует, что делает программа и зачем она считала сумму 2 и 3.