web-dev-qa-db-fra.com

Accès PHP var depuis un fichier javascript externe

Je peux accéder à une PHP var avec Javascript comme ceci:

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

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

Mais que se passe-t-il si je veux utiliser un fichier JS externe:

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

externaljs.js:

alert("color: " + "<?php echo $color; ?>");
47
FFish

Vous n'y accédez pas vraiment, vous l'insérez dans le code javascript lorsque vous servez la page.

Cependant, si votre autre javascript ne provient pas d'une source externe, vous pouvez faire quelque chose comme:

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

puis dans le fichier file.js, utilisez la couleur comme ceci:

alert("color: " + color);
80
Don

Vous pouvez également accéder aux données du script php en Javascript (je vais utiliser jQuery ici) comme ceci

Créez un champ caché en entrée dans votre fichier php comme ceci

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

dans votre fichier javascript:

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

Cela fera le travail aussi :)

9
Atanas Kovachev

Ce que j'ai vu faire est de laisser les fichiers .js s'exécuter via l'interpréteur php. Ce que je ne peux pas recommander.  

Ce que je recommande, c'est d'extraire les valeurs via AJAX et de laisser le fichier PHP renvoyer la valeur au fichier JS. Ce qui est une méthode beaucoup plus propre.

7
Ólafur Waage

Tout d'abord, vous devez comprendre qu'aucun programme ne peut réellement avoir accès à la variable de l'autre programme.

Quand vous vous en rendez compte, le reste est simple.
Vous pouvez soit configurer une variable js dans le fichier principal, puis inclure votre js externe, ou bien rendre ce js externe dynamique, généré par PHP également

4

Ce que vous voulez probablement s'appelle JavaScript asynchrone et XML (AJAX): http://www.w3schools.com/ajax/default.aspa

En gros, imaginez que vous puissiez envoyer des messages JavaScript des clients à vos scripts PHP sur le serveur. Dans l'exemple que vous avez donné (externaljs.js), vous demanderiez au script de demander au serveur ce qu'est $ color, via HTTP. Vous pouvez également pointer la balise de script sur un script PHP qui génère le code JavaScript souhaité. Cela dépend de ce que vous devez faire.

Il est utile d’avoir une certaine compréhension de la vérification des altérations, de la vérification des données et de la sécurité;)

4
TerryP

Comme le disent les autres, javascript n'a pas accès aux variables php. Cependant, il a accès au DOM. Vous pouvez donc utiliser php pour ajouter des attributs à certains éléments de page. Et ensuite, vous pouvez accéder à ces attributs avec javascript.

par exemple. <div id='Apple' class='red'> est complètement disponible pour javascript

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

Vous pouvez le changer en 

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

Et le script PHP pourrait simplement écrire du code JavaScript comme ça:

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

Bien que l'utilisation de AJAX comme dit Sepehr Lajevardi serait beaucoup plus propre

1
Serty Oan

La solution Don est bonne. En outre, si vous souhaitez utiliser un tableau php dans un javascipt externe, cela peut vous aider:

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: (Vous pouvez maintenant utiliser le tableau comme un tableau Javascript normal)

 my_js_array[0] 
 my_js_array.length
1
Mr Rubix

externaljs.js est un fichier statique. Bien sûr, il ne peut pas accéder aux données PHP. Le seul moyen de transmettre des données PHP à un fichier js serait de modifier physiquement le fichier en l'écrivant dans votre script PHP, bien que cette solution soit au mieux désordonnée.

Edit en réponse à la réponse d'Ólafur Waage: J'imagine que l'écriture dans le fichier js n'est pas la méthode seulement. Passer le js par l’interprète PHP ne m’a jamais traversé l’esprit (pour une bonne raison).

1

Vous pouvez include() les comme vous le feriez avec n'importe quoi:

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

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

Cela rendra essentiellement le fichier externe sous forme de fichier js intégré. Le principal inconvénient est que vous perdez l’avantage potentiel de la mise en cache du navigateur sur les performances. D'un autre côté, c'est beaucoup plus facile que de re-déclarer vos variables php en javascript.

0
billynoah

Vous ne pouvez pas faire cela et n'essayez pas, car ce n'est pas une approche recommandée. Cependant, vous pouvez passer des variables php comme paramètres de fonction pour une fonction écrite en js externe

0
sushil bharwani

2017-2018 et solution ci-dessus: 

Comme personne ne l’a encore évoqué et que je suppose que personne n’a encore pensé à combiner les fonctions base64_encode et json_encode, vous pouvez même envoyer des variables de tableau PHP comme celles-ci:

index.php

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

Ensuite, vous pouvez simplement charger votre fichier js souhaité avec le paramètre pour une chaîne de requête comme ceci:

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

Alors js/main.php ressemblera à ceci par exemple. Vous pouvez tester vos variables de cette façon:

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

Ce qui suit sera alors affiché lorsque vous ouvrirez votre index.php. Donc, vous voyez, vous n'ouvrez pas js/main.php et vous obtenez toujours la fonctionnalité javascript.

 enter image description here

0
AlexioVay