Доступ к 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; ?>");
Author: FFish, 2010-05-28

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);
 75
Author: Don, 2016-05-18 05:00:09

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

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

 9
Author: Atanas Kovachev, 2014-06-19 15:32:04

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

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

 7
Author: Ólafur Waage, 2010-05-28 12:26:37

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

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

 4
Author: Your Common Sense, 2010-05-28 12:19:57

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

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

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

 4
Author: TerryP, 2010-05-28 12:21:46

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

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

 3
Author: dnagirl, 2010-05-28 12:25:09

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

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

 1
Author: Manos Dilaverakis, 2010-05-28 12:16:39
<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, как сказал Сепер Лаеварди, было бы намного чище

 1
Author: Serty Oan, 2010-05-28 12:28:00

Решение 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
 1
Author: Mr Rubix, 2016-07-22 18:56:12

Вы не можете этого сделать и не пытайтесь, так как это не рекомендуемый подход, Однако вы можете передавать переменные php в качестве параметров функции для функции, написанной во внешнем js

 0
Author: sushil bharwani, 2010-05-28 12:17:59

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.

enter image description here

 0
Author: AlexioVay, 2017-10-06 07:40:27