Dostęp do PHP var z zewnętrznego pliku javascript

Mogę uzyskać dostęp do var PHP z Javascript w ten sposób:

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

<script type="text/javascript">
    alert("fruit: " + "<?php echo $fruit; ?>"); // or shortcut "<?= $fruit ?>"
</script>

Ale co jeśli chcę użyć zewnętrznego pliku JS:

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

Externaljs.js:

alert("color: " + "<?php echo $color; ?>");
Author: FFish, 2010-05-28

11 answers

Tak naprawdę nie masz do niego dostępu, wstawiasz go do kodu javascript podczas serwowania strony.

Jeśli jednak twój inny javascript nie jest z zewnętrznego źródła, możesz zrobić coś takiego:

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

A następnie w pliku.js używa koloru tak:

alert("color: " + color);
 75
Author: Don,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-18 05:00:09

Możesz również uzyskać dostęp do danych ze skryptu php w Javascript (tutaj użyję jQuery) w następujący sposób

Utwórz ukryte pole wejściowe w pliku php w ten sposób

<input type="hidden" id="myPhpValue" value="<?php echo $myPhpValue ?>" />

W Twoim pliku javascript:

var myPhpValue = $("#myPhpValue").val();
//From here you can the whaterver you like with you js Value
if(myPhpValue != ''){
//Do something here
}

To też da radę:)

 9
Author: Atanas Kovachev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-19 15:32:04

To, co widziałem, to pozwolić .Pliki js są uruchamiane przez interpreter php. którego nie mogę polecić.

Zalecam pobranie wartości przez AJAX i zwrócenie wartości przez plik PHP do pliku JS. Co jest o wiele czystszą metodą.

 7
Author: Ólafur Waage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-28 12:26:37

Po pierwsze musisz zrozumieć, że żaden program nie może mieć dostępu do zmiennej innego programu.

Kiedy zdasz sobie z tego sprawę, reszta jest prosta.
Możesz skonfigurować zmienną js w głównym pliku, a następnie dołączyć zewnętrzny js, lub sprawić, że ten zewnętrzny js będzie dynamiczny, wygenerowany również przez PHP

 4
Author: Your Common Sense,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-28 12:19:57

To, czego prawdopodobnie chcesz, nazywa się asynchronicznym JavaScript i XML (AJAX): http://www.w3schools.com/ajax/default.aspa

Zasadniczo wyobraź sobie możliwość wysyłania wiadomości Od Klientów JavaScript do skryptów PHP na serwerze. W podanym przykładzie (externaljs.js), skrypt zapyta serwer co to jest $color, poprzez HTTP. Znacznik script można również skierować na skrypt PHP, który generuje żądany JavaScript. To zależy od tego, czego potrzebujesz zrób.

To pomaga mieć trochę zrozumienia sprawdzania skażenia, weryfikacji danych i bezpieczeństwa;)

 4
Author: TerryP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-28 12:21:46

Jak mówią inni, javascript nie ma dostępu do zmiennych php. Ma jednak dostęp do DOM. Możesz więc użyć php, aby dodać atrybuty do jakiegoś elementu strony. Następnie możesz uzyskać dostęp do tych atrybutów za pomocą javascript.

Np. {[0] } jest całkowicie Dostępny dla javascript

 3
Author: dnagirl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-28 12:25:09

Externaljs.js jest plikiem statycznym. Oczywiście nie ma dostępu do danych PHP. Jedynym sposobem, aby przekazać dane PHP do pliku js byłoby fizycznie zmienić plik, zapisując do niego w skrypcie PHP, chociaż jest to w najlepszym razie bałagan rozwiązanie.

Edit w odpowiedzi na odpowiedź: domyślam się, że zapis do pliku js nie jest sposobem Tylko . Przekazywanie js przez interpreter PHP nigdy nie przyszło mi do głowy (nie bez powodu).

 1
Author: Manos Dilaverakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-28 12:16:39
<script type="text/javascript" src="externaljs.js"></script>

Możesz zmienić na

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

A skrypt PHP mógłby tak pisać JavaScript:

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

Chociaż używanie Ajaxu, jak powiedział Sepehr Lajevardi, byłoby dużo czystsze

 1
Author: Serty Oan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-28 12:28:00

Don rozwiązanie jest dobre, ponadto jeśli chcesz użyć tablicy php w zewnętrznym javascipt to może Ci pomóc:

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: (możesz teraz używać tablicy jak zwykłej tablicy Javascript)

 my_js_array[0] 
 my_js_array.length
 1
Author: Mr Rubix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-22 18:56:12

Nie możesz tego zrobić i nie próbuj, ponieważ nie jest to zalecane podejście, jednak możesz przekazać zmienne php jako parametry funkcji do funkcji napisanej w zewnętrznym js

 0
Author: sushil bharwani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-28 12:17:59

2017-2018 i powyżej rozwiązanie:

Ponieważ nikt jeszcze tego nie wymyślił i chyba nikt nie pomyślał o połączeniu funkcji base64_encode i json_encode, można nawet wysłać zmienne tablicy PHP w ten sposób:

Indeks.php

<?php
      $string = "hello";
      $array = ['hi', 'how', 'are', 'you'];
      $array = base64_encode(json_encode($array));

Następnie możesz po prostu załadować żądany plik js z parametrem dla ciągu zapytania, takiego jak:

echo '<script type="text/javascript" src="js/main.php?string='.$string.'&array='.$array.'">';

Wtedy js/main.php będzie wyglądać na przykład tak. Możesz przetestować swoje zmienne w ten sposób:

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();
    ?>

Po otwarciu index.php zostaną wyświetlone następujące dane. Więc widzisz, nie otwierasz js/main.php i nadal masz z niego funkcjonalność javascript.

Tutaj wpisz opis obrazka

 0
Author: AlexioVay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-06 07:40:27