230 votes

Comment appeler une fonction JavaScript depuis PHP ?

Comment appeler une fonction JavaScript depuis PHP ?

<?php

  jsfunction();
  // or
  echo(jsfunction());
  // or
  // Anything else?

Le code suivant provient de xyz.html (lors d'un clic sur un bouton), il appelle une wait() en externe xyz.js . Ce site wait() appelle wait.php.

function wait() 
{
  xmlhttp=GetXmlHttpObject();
  var url="wait.php"; \
  xmlhttp.onreadystatechange=statechanged; 
  xmlhttp.open("GET", url, true); 
  xmlhttp.send(null);
} 

function statechanged()
{ 
  if(xmlhttp.readyState==4) {
       document.getElementById("txt").innerHTML=xmlhttp.responseText;
  }
}

et attendre.php

<?php echo "<script> loadxml(); </script>"; 

loadxml() appelle le code d'un autre fichier PHP de la même manière.

Le site loadxml() fonctionne bien sinon, mais il n'est pas appelé comme je le souhaite.

1 votes

De même, mon javascript et mon php sont externes.

411voto

Peter Bailey Points 62125

En ce qui concerne PHP (ou vraiment, un serveur web en général), une page HTML n'est rien de plus compliqué qu'une grosse chaîne de caractères.

Toutes les fantaisies que vous pouvez faire avec un langage comme le PHP - lire des bases de données et des services web et tout cela - l'objectif final est exactement le même principe de base : générer une chaîne de caractères HTML*.

Votre grande chaîne HTML ne devient rien de plus spécial que cela jusqu'à ce qu'elle soit chargée par un navigateur web. Une fois que le navigateur a chargé la page, puis toutes les autres magies se produisent - mise en page, modèle de boîte, génération de DOM, et bien d'autres choses, y compris l'exécution de JavaScript.

Ainsi, vous n'appelez pas JavaScript depuis PHP, mais vous incluez un appel de fonction JavaScript dans votre résultat.

Il existe de nombreuses façons de le faire, mais en voici quelques-unes.

En utilisant uniquement PHP :

echo '<script type="text/javascript">',
     'jsfunction();',
     '</script>'
;

Passage du mode php au mode de sortie directe :

<?php
    // some php stuff
?>
<script type="text/javascript">
    jsFunction();
</script>

Vous n'avez pas besoin de renvoyer un nom de fonction ou quoi que ce soit d'autre. Tout d'abord, arrêtez d'écrire des requêtes AJAX à la main. Vous ne faites que vous rendre la tâche difficile. Prenez jQuery ou l'un des autres excellents frameworks qui existent.

Deuxièmement, comprenez que vous allez déjà exécuter du code javascript une fois que la réponse est reçue de l'appel AJAX.

Voici un exemple de ce que je pense que vous faites avec l'AJAX de jQuery.

$.get(
    'wait.php',
    {},
    function(returnedData) {
        document.getElementById("txt").innerHTML = returnedData;

        //  Ok, here's where you can call another function
        someOtherFunctionYouWantToCall();

        // But unless you really need to, you don't have to
        // We're already in the middle of a function execution
        // right here, so you might as well put your code here
    },
    'text'
);

function someOtherFunctionYouWantToCall() {
    // stuff
}

Maintenant, si vous tenez absolument à renvoyer un nom de fonction de PHP à l'appel AJAX, vous pouvez le faire aussi.

$.get(
    'wait.php',
    {},
    function(returnedData) {
        // Assumes returnedData has a javascript function name
        window[returnedData]();
    },
    'text'
);

* Ou JSON ou XML, etc.

2 votes

Il y a bien sûr aussi l'option de lier un fichier javascript externe qui fait l'appel lui-même... De cette façon, vous gardez le JavaScript là où il doit être, dans le code JavaScript. =)

0 votes

Cela ne fonctionne pas. j'ai essayé les deux. le suivi de mon programme est, de .html (sur le clic du bouton) il va à une fonction .js externe qui charge un fichier php (en utilisant xmlhttp=GetXmlHttpObject();var url="phpwithmysqlwait.php" ; xmlhttp. onreadystatechange=statechanged ; xmlhttp.open("GET", url, true) ; xmlhttp.send(null) ; ) et mon appel php <?php echo "<script> loadxml() ; </script> ; ?> où loadxml appelle un autre php de la même manière. Le loadxml() fonctionne bien autrement, mais il n'est pas appelé de la façon dont je le veux. Pouvez-vous me suggérer quelque chose ?

0 votes

Mettez à jour votre question initiale avec ces informations afin qu'elle soit plus facile à lire. Je peux modifier ma réponse pour tenir compte de ces spécificités.

91voto

GSto Points 13106

J'utilise toujours juste echo "<script> function(); </script>"; ou quelque chose de similaire. Techniquement, vous n'appelez pas la fonction en PHP, mais c'est le mieux que vous puissiez faire.

18 votes

Assurez-vous simplement de placer la fonction javascript avant l'écho du script, ou il ne peut pas être appelé.

0 votes

Pouvons-nous retourner la sortie de echo dans une variable dans PHP ?

0 votes

@alper - Non. Utilisez AJAX ou xhr pour renvoyer les données au serveur, mais elles ne seront pas envoyées à cette instance de PHP.

58voto

bertzzie Points 999

Aujourd'hui (février 2012), il y a une nouvelle fonctionnalité pour cela. Consultez ici

Exemple de code (pris sur le web) :

<?php

$v8 = new V8Js();

/* basic.js */
$JS = <<< EOT
len = print('Hello' + ' ' + 'World!' + "\\n");
len;
EOT;

try {
  var_dump($v8->executeString($JS, 'basic.js'));
} catch (V8JsException $e) {
  var_dump($e);
}

?>

0 votes

Cela ne correspond peut-être pas exactement au cas d'utilisation de la question originale, mais d'après le titre de la question, cette réponse devrait avoir beaucoup plus de votes.

7 votes

Sachez simplement que cela nécessite l'installation de l'extension V8Js dans votre installation PHP.

11voto

Matthew Flaschen Points 131723

Tu ne peux pas. Vous pouvez appeler une fonction JS à partir de HTML sortie par PHP, mais c'est une autre histoire.

1 votes

Je suis capable d'appeler une fonction JS comme ceci : echo "<td onClick= loadxml()><i>Click for Details</i></td>" ;.... mais je ne veux pas cliquer sur quoi que ce soit maintenant. Je veux juste que mon php appelle une fonction JS avec n'importe quel événement.

2 votes

Cet exemple utilise un événement de clic en HTML, pas en php. JavaScript est côté client et php est côté serveur. Vous ne pouvez pas appeler directement JavaScript avec PHP.

7voto

Daff Points 22358

Ce n'est pas possible. PHP est un langage côté serveur et JavaScript côté client et ils ne se connaissent pas vraiment. Vous auriez besoin d'un interpréteur JavaScript côté serveur (comme Aptanas Jaxer). Peut-être que ce que vous voulez réellement faire est d'utiliser une architecture de type Ajax (la fonction JavaScript appelle PHP script de manière asynchrone et fait quelque chose avec le résultat).

<td onClick= loadxml()><i>Click for Details</i></td>

function loadxml()
{
    result = loadScriptWithAjax("/script.php?event=button_clicked");
    alert(result);
}

// script.php
<?php
    if($_GET['event'] == 'button_clicked')
        echo "\"You clicked a button\"";
?>

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