Comment appeler une fonction JavaScript à partir de PHP?

comment appeler une fonction JavaScript à partir de PHP?

<?php

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

le code suivant est de xyz.html (sur le bouton) il appelle une wait() en externe xyz.js . Ce 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 attendez.php

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

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

le loadxml() fonctionne bien autrement, mais il ne s'appelle pas comme je le veux.

176
demandé sur mithunsatheesh 2009-06-25 23:45:42

11 réponses

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

tout le travail de fantaisie que vous pouvez faire avec le langage comme PHP - lecture à partir de bases de données et services web et tout cela - le but ultime est le même principe de base exacte: générer une chaîne de 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 un le navigateur charge la page, puis toutes les autres choses magiques se produisent - la mise en page, les trucs de modèle de boîte, la génération de DOM, et bien d'autres choses, y compris L'exécution JavaScript.

donc, vous ne" appelez pas JavaScript à partir de PHP", vous"incluez un appel de fonction JavaScript dans votre sortie".

il y a plusieurs façons de le faire, mais en voici quelques-unes.

utilisant juste PHP:

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

S'échapper du mode php pour le mode de sortie directe:

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

vous n'avez pas besoin de retourner un nom de fonction ou quelque chose comme ça. Tout d'abord, arrêtez D'écrire des requêtes AJAX à la main. Vous ne faites que c'est dur sur vous-même. Obtenez jQuery ou l'un des autres cadres excellents là-bas.

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

voici un exemple de ce que je 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 do
        // 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 êtes prêt à envoyer 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.

323
répondu Peter Bailey 2016-08-04 14:35:28

j'utilise toujours echo "<script> function(); </script>"; ou quelque chose de similaire. vous n'appelez pas techniquement la fonction en PHP, mais c'est aussi proche que vous allez l'obtenir.

83
répondu GSto 2009-06-25 19:48:36

Per now (février 2012) il y a une nouvelle fonctionnalité pour cela. Vérifier ici

exemple de Code (tiré du 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);
}

?>
44
répondu bertzzie 2012-02-25 12:48:45

vous ne pouvez pas. Vous pouvez appeler une fonction JS à partir de HTML outputted par PHP, mais c'est une toute autre chose.

13
répondu Matthew Flaschen 2009-06-25 19:48:28

c'est impossible. PHP est un langage côté serveur et JavaScript côté client et ils ne savent pas vraiment beaucoup l'un sur l'autre. 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 le script PHP 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\"";
?>
6
répondu Daff 2009-06-25 19:57:12

Si vous voulez en faire l'écho pour l'exécuter plus tard c'est ok

si vous voulez exécuter le JS et utiliser les résultats en PHP utilisez V8JS

V8Js::registerExtension('say_hi', 'print("hey from extension! "); var said_hi=true;', array(), true);
$v8 = new V8Js();
$v8->executeString('print("hello from regular code!")', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');

vous pouvez consulter ici pour d'autres références: que sont les Extensions dans php v8js?

si vous voulez exécuter HTML&JS et utiliser la sortie en PHP http://htmlunit.sourceforge.net / is your solution

6
répondu Pian0_M4n 2017-05-23 12:10:06

PHP s'exécute dans le serveur. JavaScript fonctionne dans le client. Donc php ne peut pas appeler une fonction JavaScript.

3
répondu Daniel Moura 2009-06-25 19:49:01

vous pouvez essayer celui-ci aussi:-

    public function PHPFunction()
    {
            echo '<script type="text/javascript">
                 test();
            </script>'; 
    }
    <script type="text/javascript">
    public function test()
    {
        alert('In test Function');
    }
    </script>
2
répondu umesh 2013-03-19 11:05:53

vous pouvez ne pas être en mesure de le faire directement, mais la bibliothèque Xajax est assez proche de ce que vous voulez. Je vais le démontrer par un exemple. Voici un bouton sur une page web:

<button onclick="xajax_addCity();">Add New City</button> 

notre intuition serait que xajax_addCity() est une fonction Javascript, Non? Bien, bon et mauvais. La chose cool Xajax permet est que nous n'avons pas de fonction JS appelée xajax_addCity() , mais ce que nous avons est une fonction PHP appelée addCity() qui peut faire tout ce que PHP fait!

<?php function addCity() { echo "Wow!"; } ?>

réfléchissez une minute. Nous invoquons virtuellement une fonction PHP à partir du code Javascript! Cet exemple trop simplifié était juste pour aiguiser l'appétit, une meilleure explication est sur le site Xajax, amusez-vous!

1
répondu Ham Sam 2013-08-05 09:04:14

si vous voulez appeler method inside echo vous devez les enfermer dans des guillemets simples:

    function f() {
      //code
      alert("its calling from echo ");
    }

    echo "<td onclick='f();'>".Method calling."</td>";
1
répondu Adiii 2017-01-07 12:30:49

essayez comme ceci

<?php
 if(your condition){
     echo "<script> window.onload = function() {
     yourJavascriptFunction(param1, param2);
 }; </script>";
?>
1
répondu Vivek ab 2017-03-17 07:34:24