Доступ к 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; ?>"); 

Вы действительно не обращаетесь к нему, вы вставляете его в код 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), у вас будет сценарий, задающий серверу, какой цвет $ есть через HTTP. Вы также можете указать тег сценария на 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, как сказал Sepehr Lajevardi, было бы намного чище

Дон решение хорошо, кроме того, если вы хотите использовать 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 Array:

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.

введите описание изображения здесь