3 votes

Transmettre une chaîne Javascript à PHP

Je veux passer une chaîne javascript à php ... QUI se trouve juste après le code ... dans le script.

<script type="text/javascript">
  var myvar = "mytext" ;

 <?php echo myvar ; ?>
</script>

cela ne fonctionne pas. Que dois-je faire ?

11voto

sdleihssirhc Points 18791

Lorsqu'une personne visite un site web, voici ce qui se passe généralement :

  1. Leur navigateur envoie une requête au serveur.
  2. Le serveur évalue cette demande.
  3. Le serveur se dit : "Mince, la page qu'ils demandent contient du PHP !".
  4. Le serveur évalue le PHP, et n'envoie que les résultats au navigateur.
  5. Le navigateur analyse le contenu qu'il reçoit.
  6. Le navigateur se dit : "Mince, la page que j'ai reçue contient du JavaScript !".
  7. Le navigateur évalue le JavaScript, entièrement sur la machine du client.

PHP et JavaScript sont donc à des étapes différentes du processus. Seul le serveur gère PHP, et seul le client gère JavaScript.

Pour "donner" une chaîne de caractères à PHP, il faudrait faire une requête à la page PHP, en envoyant cette chaîne comme variable GET :

http://www.yourdomain.com/some_php_page.php?myvar=mytext

Il y a plusieurs façons de le faire avec JavaScript.

  1. Si vous ne vous souciez que de faire cette requête sur la page PHP, et que vous n'avez pas à vous soucier de recevoir des informations en retour, vous pouvez simplement créer une image et utiliser l'URL comme source :

    var fakeImg = new Image();
    fakeImg.src = 'http://www.yourdomain.com/some_php_page.php?myvar=mytext';

    Même si vous demandez une image, le serveur ne le sait pas, et traitera votre demande en appelant le PHP qui l'évalue, etc.

  2. Vous pouvez faire une vraie demande AJAX. Commencez par créer un objet XMLHttpRequest :

    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');

    Il y a quelques problèmes dans IE avec les réponses en cache sur les requêtes AJAX, donc rendez l'url unique :

    var url = 'http://www.yourdomain.com/some_php_page.php?myvar=mytext&unique=whatever';

    Dites à votre XHR où vous voulez qu'il aille et comment vous voulez qu'il y aille :

    xhr.open('GET', url, true);
    // The "true" parameter tells it that we want this to be asynchronous

    Mettez en place une méthode qui vérifiera si une réponse est reçue :

    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status < 400) {
            success(xhr.responseText);
        }
    };

    Et enfin, envoyez la demande :

    xhr.send(null);
    // We set "null" because some browsers are pissy

    Quelques notes à garder à l'esprit :

    • Vous devez construire le success vous-même, pour gérer la chaîne de caractères que votre page PHP retournera.
    • Vous pouvez passer cette fonction xhr.responseXML si vous voulez, mais c'est généralement un problème pour moi.
    • Utilisation de onreadystatechange de la façon dont je l'ai fait va (je crois) introduire des fuites de mémoire dans certaines versions d'IE.

5voto

Vache Points 13219

Le PHP est exécuté côté serveur alors que le javascript est côté client, ce qui signifie que le PHP est déjà exécuté lorsque vous envoyez votre code javascript.

Vous devriez plutôt vous tourner vers AJAX.

0voto

Baszz Points 5779

Vous devriez comprendre la différence entre le code côté client et le code côté serveur. La variable que vous introduisez dans le code php n'est pas assignée avant parce que cette variable est définie chez le client. Votre exemple de code est donc faux par essence. Si vous voulez qu'une valeur qui est présente sur le client (javascript) soit disponible sur le serveur (php), vous devez faire quelque chose avec l'objet xmlhttprequest de javascript (également connu sous le nom d'ajax).

Vous pouvez cependant faire l'inverse... imprimer une valeur php en javascript. C'est parce que le script est créé côté serveur et envoyé au client avant d'être traité par le navigateur.

Je ne suis pas sûr de ce que vous essayez d'atteindre mais peut-être que ceci vous aidera un peu.

-1voto

onteria_ Points 18947

Votre exemple est quelque peu confus :

<script type="text/javascript">
  var myvar = "mytext" ;

 <?php echo myvar ; ?>
</script>

Parce que si je fais ça :

<script type="text/javascript">
  <?php $myvar = "mytext"; ?>
  var myvar = "<?php echo $myvar; ?>" ;
</script>

Ensuite, il définit la valeur JavaScript de myvar à la valeur PHP de $myvar pour que les deux restent les mêmes. Si vous essayez de faire quelque chose d'autre, vous devez développer votre exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X