web-dev-qa-db-fra.com

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 (sur un clic de bouton), il appelle un wait() dans un externe xyz.js. Cette 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 wait.php

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

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

La loadxml() fonctionne bien sinon, mais on ne l'appelle pas comme je le veux.

190
Zeeshan Rang

En ce qui concerne PHP (ou, en réalité, un serveur Web), une page HTML n’est rien de plus compliqué qu’une grosse chaîne.

Tout le travail de fantaisie que vous pouvez faire avec un langage comme PHP - lire des bases de données et des services Web, etc. - l'objectif ultime 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 son chargement par un navigateur Web. Une fois qu'un navigateur a chargé la page, alors tous les autres phénomènes magiques se produisent: mise en page, éléments de modèle de boîte, génération DOM et bien d'autres choses, y compris l'exécution de JavaScript.

Donc, vous "n'appelez pas JavaScript depuis PHP", vous "n'incluez un appel de fonction JavaScript dans votre sortie".

Il y a plusieurs façons de le faire, mais en voici deux.

En utilisant simplement PHP:

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

Sortir 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 quelque chose du genre. Tout d’abord, arrêtez d’écrire AJAX demandes à la main. Vous ne faites que rendre les choses difficiles pour vous. Obtenez jQuery ou l’un des autres excellents frameworks.

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

Voici un exemple de ce que je pense que vous faites avec 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 ne voulez pas envoyer un nom de fonction de PHP à l'appel AJAX, vous pouvez également le faire.

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

* Ou JSON ou XML, etc.

342
Peter Bailey

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

84
GSto

À présent (février 2012), une nouvelle fonctionnalité est proposée. Vérifiez ici

Échantillon 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);
}

?>
47
bertzzie

Tu ne peux pas. Vous pouvez appeler une fonction JS à partir de HTML sortie par PHP, mais ce n'est pas tout.

13
Matthew Flaschen

Si vous voulez faire écho pour une exécution ultérieure, c'est ok

Si vous voulez exécuter le JS et utiliser les résultats dans 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 vous référer ici pour référence ultérieure: Que sont les extensions dans php v8js?

Si vous voulez exécuter HTML & JS et utiliser le résultat dans PHP http://htmlunit.sourceforge.net/ est votre solution

7
Pian0_M4n

Ce n'est pas possible. PHP est un langage côté serveur et un côté client JavaScript et ils ne se connaissent pas vraiment. Vous aurez 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 un Ajax comme Architecture (la fonction JavaScript appelle PHP un 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\"";
?>
6
Daff

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

3
Daniel Moura

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
umesh

essayez comme ça

<?php
 if(your condition){
     echo "<script> window.onload = function() {
     yourJavascriptFunction(param1, param2);
 }; </script>";
?>
2
Vivek ab

Vous ne pourrez peut-être pas le faire directement, mais la bibliothèque Xajax est assez proche de ce que vous voulez. Je vais démontrer avec un exemple. Voici un bouton sur une page Web:

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

Notre hypothèse intuitive serait que xajax_addCity() est une fonction Javascript, non? Eh bien, vrai et faux. La chose intéressante que Xajax permet est que nous n’avons aucune fonction JS appelée xajax_addCity(), mais nous avons une fonction PHP appelée addCity() qui peut tout faire PHP fait!

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

Pensez-y une minute. Nous appelons virtuellement une fonction PHP à partir de code Javascript! Cet exemple trop simplifié visait simplement à ouvrir l'appétit, une meilleure explication est sur le site Xajax, amusez-vous!

1
Hamman Samuel

si vous voulez appeler method dans echo, vous devez les inclure entre guillemets:

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

    echo "<td onclick='f();'>".Method calling."</td>";
0
Adiii