Подтвердить что ты не робот

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

Ответ 1

Вы действительно не обращаетесь к нему, вы вставляете его в код 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);

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

<script type="text/javascript" src="externaljs.js"></script>

Вы можете изменить его на

<script type="text/javascript" src="externaljs.php"></script>

И PHP script мог просто написать JavaScript:

<?php
$fruit = "apple";
echo 'var fruit = '.json_encode($fruit);
...

Хотя использование AJAX, как сказал Sepehr Lajevardi, будет намного чище

Ответ 9

Решение 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

Ответ 10

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

Ответ 11

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.

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

Ответ 12

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

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

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

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