Доступ к PHP var из внешнего файла javascript
Я могу получить доступ к PHP var с помощью Javascript следующим образом:
<?php
$fruit = "apple";
$color = "red";
?>
<script type="text/javascript">
alert("fruit: " + "<?php echo $fruit; ?>"); // or shortcut "<?= $fruit ?>"
</script>
Но что, если я захочу использовать внешний файл JS:
<script type="text/javascript" src="externaljs.js"></script>
Externaljs.js :
alert("color: " + "<?php echo $color; ?>");
11 answers
На самом деле вы не получаете к нему доступ, вы вставляете его в код javascript, когда обслуживаете страницу.
Однако, если ваш другой javascript не из внешнего источника, вы можете сделать что-то вроде:
<?php
$color = "Red";
?>
<script type="text/javascript">var color = "<?= $color ?>";</script>
<script type="text/javascript" src="file.js"></script>
А затем в file.js используйте цвет следующим образом:
alert("color: " + color);
Вы также можете получить доступ к данным из php-скрипта на Javascript (я буду использовать jQuery здесь) вот так
Создайте скрытое поле ввода в вашем php-файле, как это
<input type="hidden" id="myPhpValue" value="<?php echo $myPhpValue ?>" />
В вашем файле javascript:
var myPhpValue = $("#myPhpValue").val();
//From here you can the whaterver you like with you js Value
if(myPhpValue != ''){
//Do something here
}
Это тоже сделает свою работу:)
Что я видел, так это то, что файлы .js запускаются через интерпретатор php. Который я не могу рекомендовать.
Что я действительно рекомендую, так это получить значения через AJAX и заставить PHP-файл вернуть значение в файл JS. Что является гораздо более чистым методом.
Прежде всего, вы должны понимать, что ни одна программа на самом деле не может иметь доступа к переменной другой программы.
Когда вы поймете это, все остальное будет просто.
Вы можете либо настроить переменную js в главном файле, а затем включить свой внешний js, либо сделать этот внешний js динамическим, также сгенерированным PHP
То, что вы, вероятно, хотите, называется асинхронным JavaScript и XML (AJAX): http://www.w3schools.com/ajax/default.aspa
В принципе, представьте, что вы можете отправлять сообщения с клиентского JavaScript на ваши PHP-скрипты на сервере. В приведенном вами примере(externaljs.js ), вы бы попросили скрипт спросить сервер, что такое $color, через HTTP. Вы также можете указать тег script на PHP-скрипт, который генерирует нужный вам JavaScript. Это зависит от того, что вам нужно сделай.
Это помогает иметь некоторое представление о проверке на заражение, проверке данных и безопасности;)
Как говорят другие, javascript не имеет доступа к переменным php. Тем не менее, у него есть доступ к DOM. Таким образом, вы можете использовать php для добавления атрибутов к какому-либо элементу страницы. А затем вы можете получить доступ к этим атрибутам с помощью javascript.
Например, <div id='apple' class='red'>
полностью доступен для javascript
Externaljs.js это статический файл. Конечно, он не может получить доступ к данным PHP. Единственный способ передать данные PHP в файл js - это физически изменить файл, записав его в свой PHP-скрипт, хотя в лучшем случае это грязное решение.
Отредактируйте в ответ на ответ Олафура Вааге: Я полагаю, что запись в файл js - это не единственный способ. Передача js через интерпретатор PHP никогда не приходила мне в голову (по уважительной причине).
<script type="text/javascript" src="externaljs.js"></script>
Вы могли бы изменить его на
<script type="text/javascript" src="externaljs.php"></script>
И PHP-скрипт мог бы просто написать JavaScript так:
<?php
$fruit = "apple";
echo 'var fruit = '.json_encode($fruit);
...
Хотя использование AJAX, как сказал Сепер Лаеварди, было бы намного чище
Решение Don является хорошим, кроме того, если вы хотите использовать массив php во внешнем javascipt, это может вам помочь:
PHP:
<?php
$my_php_array = [];
?>
HTML:
<script type="text/javascript"> var my_js_array = <?php echo json_encode($my_php_array);?> ; </script>
<script src = "../public/js/my-external-js.js"></script>
Javasript: (Теперь вы можете использовать массив как обычный массив Javascript)
my_js_array[0]
my_js_array.length
Вы не можете этого сделать и не пытайтесь, так как это не рекомендуемый подход, Однако вы можете передавать переменные php в качестве параметров функции для функции, написанной во внешнем js
2017-2018 и выше решение:
Поскольку никто еще не поднял его, и я думаю, что никто еще не думал об объединении функций base64_encode
и json_encode
, вы даже можете отправить переменные массива PHP следующим образом:
Index.php
<?php
$string = "hello";
$array = ['hi', 'how', 'are', 'you'];
$array = base64_encode(json_encode($array));
Затем вы можете просто загрузить нужный js-файл с параметром для строки запроса, например:
echo '<script type="text/javascript" src="js/main.php?string='.$string.'&array='.$array.'">';
Тогда js/main.php
будет выглядеть, например, так. Вы можете проверить свои переменные следующим образом способ:
Js/main.php
<?php
if ($_GET['string']) {
$a = $_GET['string'];
}
if ($_GET['array']) {
$b = $_GET['array'];
}
$b = json_decode(base64_decode($b));
echo 'alert("String $a: + '.$a.'");';
echo 'alert("First key of Array $array: + '.$b[0].'");';
exit();
?>
Затем, когда вы откроете свой index.php
, будет выведено следующее. Итак, вы видите, что вы не открываете js/main.php
, и вы все еще получаете от него функциональность javascript.