Доступ к PHP var из внешнего файла javascript - PullRequest
49 голосов
/ 28 мая 2010

Я могу получить доступ к PHP-переменной с помощью 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; ?>");

Ответы [ 12 ]

87 голосов
/ 28 мая 2010

Вы на самом деле не получаете к нему доступ, вы вставляете его в код JavaScript, когда обслуживаете страницу.

Однако, если ваш другой javascript не из внешнего источника, вы можете сделать что-то вроде:

<?php
    $color = "Red";
?>
<script type="text/javascript">var color = "<?= $color ?>";</script>
<script type="text/javascript" src="file.js"></script>

и затем в файле .js используйте цвет следующим образом:

alert("color: " + color);
9 голосов
/ 19 июня 2014

Вы также можете получить доступ к данным из 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
}

Это также сделает работу:)

7 голосов
/ 28 мая 2010

Я видел, что файлы .js запускались через интерпретатор php. Что я не могу рекомендовать.

Что я рекомендую, так это выборку значений через AJAX, и PHP-файл возвращает значение в JS-файл. Какой метод намного чище.

4 голосов
/ 28 мая 2010

То, что вы, вероятно, хотите, называется асинхронным JavaScript и XML (AJAX): http://www.w3schools.com/ajax/default.aspa

По сути, представьте себе возможность отправлять сообщения от клиентов JavaScript на ваши PHP-скрипты на сервере. В приведенном вами примере (externaljs.js) сценарий запрашивает у сервера значение $ color через HTTP. Вы также можете указать тег сценария на сценарий PHP, который генерирует необходимый вам JavaScript. Это зависит от того, что вам нужно сделать.

Помогает иметь некоторое представление о проверке заражения, проверке данных и безопасности;)

4 голосов
/ 28 мая 2010

Прежде всего, вы должны понимать, что ни одна программа не может на самом деле иметь доступ к переменной другой программы.

Когда вы понимаете это, все остальное просто.
Вы можете либо установить переменную js в главном файле, а затем включить внешние js, либо сделать этот внешний js динамическим, генерируемым также PHP *

3 голосов
/ 28 мая 2010

Как говорят другие, у javascript нет доступа к переменным php. Тем не менее, он имеет доступ к DOM. Таким образом, вы можете использовать php для добавления атрибутов к некоторому элементу страницы. И тогда вы можете получить доступ к этим атрибутам с помощью JavaScript.

например. <div id='apple' class='red'> полностью доступен для JavaScript

1 голос
/ 22 июля 2016

Дон решение хорошо, более того, если вы хотите использовать массив 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
1 голос
/ 28 мая 2010
<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, как сказано, Sepehr Lajevardi будет намного чище

1 голос
/ 28 мая 2010

externaljs.js - статический файл. Конечно, он не может получить доступ к данным PHP. Единственный способ передать данные PHP в файл js - это физически изменить файл, записав его в свой скрипт PHP, хотя в лучшем случае это грязное решение.

Редактировать в ответ на ответ Олафура Вейджа: я полагаю, запись в файл js - это не только способ. Передача js через интерпретатор PHP никогда не приходила мне в голову (по уважительной причине).

0 голосов
/ 16 апреля 2019

Вы можете include() их так же, как и все остальное:

<?php
    $fruit = "apple";
    $color = "red";
?>

<script type="text/javascript">
    <?php include('/path/to/your/externaljs.js'); ?>
</script>

Это будет в основном отображать внешний файл как встроенный js. Основным недостатком здесь является то, что вы теряете потенциальную выгоду производительности кеширования браузера. С другой стороны, это гораздо проще, чем повторно объявить переменные php в javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...