Получить переменную от PHP до JavaScript

Я хочу использовать переменную PHP в JavaScript. Как это возможно?

Вы можете напечатать переменную PHP в своем javascript, пока ваша страница создана.

<script type="text/javascript"> var MyJSStringVar = "<?php Print($MyPHPStringVar); ?>"; var MyJSNumVar = <?php Print($MyPHPNumVar); ?>; </script> 

Конечно, это для простых переменных, а не для объектов.

Вы можете передавать переменные PHP на свой JavaScript, генерируя его с помощью PHP:

 <?php $someVar = 1; ?> <script type="text/javascript"> var javaScriptVar = "<?php echo $someVar; ?>"; </script> 

Я думаю, что самый простой маршрут – включить javascript-библиотеку jQuery в ваши веб-страницы, а затем использовать JSON в качестве формата для передачи данных между ними.

На ваших страницах HTML вы можете запросить данные из PHP-скриптов следующим образом:

 $.getJSON('http://foo/bar.php', {'num1': 12, 'num2': 27}, function(e) { alert('Result from PHP: ' + e.result); }); 

В bar.php вы можете сделать это:

 $num1 = $_GET['num1']; $num2 = $_GET['num2']; echo json_encode(array("result" => $num1 * $num2)); 

Это то, что обычно называют AJAX, и полезно придать веб-страницам более динамичное и настольное впечатление (вам не нужно обновлять всю страницу, чтобы общаться с PHP).

Другие методы проще. Как и другие, вы можете просто генерировать переменные данных из вашего PHP-скрипта:

 $foo = 123; echo "<script type=\"text/javascript\">\n"; echo "var foo = ${foo};\n"; echo "alert('value is:' + foo);\n"; echo "</script>\n"; 

Большинство веб-страниц в настоящее время используют комбинацию из двух.

Это зависит от того, какой тип переменной PHP вы хотите использовать в Javascript. Например, целые объекты PHP с помощью методов класса не могут использоваться в Javascript. Тем не менее, вы можете использовать встроенные функции PHP JSON (JavaScript Object Notation) для преобразования простых переменных PHP в представления JSON. Для получения дополнительной информации, пожалуйста, прочитайте следующие ссылки:

  • Руководство PHP JSON
  • Функция PHP json_encode
  • Функция PHP json_decode

Вы можете создать JSON-представление своей переменной PHP, а затем распечатать ее в своем Javascript-коде при загрузке страницы. Например:

 <script type="text/javascript"> var foo = <?php echo json_encode($bar); ?>; </script> 
 <?php $j=1; ?> <script> var i = "<?php echo $j; ?>"; //Do something </script> <?php echo $j; ?> 

Это самый простой способ передать переменную php в javascript без Ajax.

Вы также можете использовать что-то вроде этого:

 var i = "<?php echo json_encode($j); ?>"; 

Это считается более безопасным или безопасным. я думаю

Обновление: я полностью переписал этот ответ. Старый код по-прежнему находится внизу, но я не рекомендую его.


Существует два основных способа доступа к переменным GET :

  1. Через массив $_GET PHP (ассоциативный массив).
  2. Через объект location JavaScript.

С PHP вы можете просто создать «шаблон», который выглядит примерно так:

 <script type="text/javascript"> var $_GET = JSON.parse("<?php echo json_encode($_GET); ?>"); </script> 

Однако, я думаю, что смесь языков здесь неаккуратная, и ее следует избегать там, где это возможно. Я не могу думать о каких-либо серьезных основах для смешивания данных между PHP и JavaScript в любом случае.

Это действительно сводится к следующему:

  • Если данные могут быть получены с помощью JavaScript, используйте JavaScript.
  • Если данные не могут быть получены с помощью JavaScript, используйте AJAX.
  • Если вам нужно общаться с сервером, используйте AJAX.

Поскольку мы говорим о $_GET здесь (или, по крайней мере, я предполагал, что мы были, когда я написал оригинальный ответ), вы должны получить его через JavaScript.

В исходном ответе у меня было два метода для получения строки запроса, но это было слишком грязно и подвержено ошибкам. В настоящее время они лежат в основе этого ответа.

В любом случае, я разработал небольшой «класс» для получения строки запроса (на самом деле конструктор объекта, см. Соответствующий раздел из статьи ООП MDN):

 function QuerystringTable(_url){ // private var url = _url, table = {}; function buildTable(){ getQuerystring().split('&').filter(validatePair).map(parsePair); } function parsePair(pair){ var splitPair = pair.split('='), key = decodeURIComponent(splitPair[0]), value = decodeURIComponent(splitPair[1]); table[key] = value; } function validatePair(pair){ var splitPair = pair.split('='); return !!splitPair[0] && !!splitPair[1]; } function validateUrl(){ if(typeof url !== "string"){ throw "QuerystringTable() :: <string url>: expected string, got " + typeof url; } if(url == ""){ throw "QuerystringTable() :: Empty string given for argument <string url>"; } } // public function getKeys(){ return Object.keys(table); } function getQuerystring(){ var string; validateUrl(); string = url.split('?')[1]; if(!string){ string = url; } return string; } function getValue(key){ var match = table[key] || null; if(!match){ return "undefined"; } return match; } buildTable(); this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; } 

Демо-версия JSFiddle

 function main(){ var imaginaryUrl = "http://example.com/webapp/?search=how%20to%20use%20Google&the_answer=42", qs = new QuerystringTable(imaginaryUrl); urlbox.innerHTML = "url: " + imaginaryUrl; logButton( "qs.getKeys()", qs.getKeys() .map(arrowify) .join("\n") ); logButton( 'qs.getValue("search")', qs.getValue("search") .arrowify() ); logButton( 'qs.getValue("the_answer")', qs.getValue("the_answer") .arrowify() ); logButton( "qs.getQuerystring()", qs.getQuerystring() .arrowify() ); } function arrowify(str){ return " -> " + str; } String.prototype.arrowify = function(){ return arrowify(this); } function log(msg){ txt.value += msg + '\n'; txt.scrollTop = txt.scrollHeight; } function logButton(name, output){ var el = document.createElement("button"); el.innerHTML = name; el.onclick = function(){ log(name); log(output); log("- - - -"); } buttonContainer.appendChild(el); } function QuerystringTable(_url){ // private var url = _url, table = {}; function buildTable(){ getQuerystring().split('&').filter(validatePair).map(parsePair); } function parsePair(pair){ var splitPair = pair.split('='), key = decodeURIComponent(splitPair[0]), value = decodeURIComponent(splitPair[1]); table[key] = value; } function validatePair(pair){ var splitPair = pair.split('='); return !!splitPair[0] && !!splitPair[1]; } function validateUrl(){ if(typeof url !== "string"){ throw "QuerystringTable() :: <string url>: expected string, got " + typeof url; } if(url == ""){ throw "QuerystringTable() :: Empty string given for argument <string url>"; } } // public function getKeys(){ return Object.keys(table); } function getQuerystring(){ var string; validateUrl(); string = url.split('?')[1]; if(!string){ string = url; } return string; } function getValue(key){ var match = table[key] || null; if(!match){ return "undefined"; } return match; } buildTable(); this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; } main(); 
 #urlbox{ width: 100%; padding: 5px; margin: 10px auto; font: 12px monospace; background: #fff; color: #000; } #txt{ width: 100%; height: 200px; padding: 5px; margin: 10px auto; resize: none; border: none; background: #fff; color: #000; displaY:block; } button{ padding: 5px; margin: 10px; width: 200px; background: #eee; color: #000; border:1px solid #ccc; display: block; } button:hover{ background: #fff; cursor: pointer; } 
 <p id="urlbox"></p> <textarea id="txt" disabled="true"></textarea> <div id="buttonContainer"></div>