Cómo llamar a una función JavaScript desde PHP?


¿Cómo llamar a una función JavaScript desde PHP?

<?php

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

El siguiente código es de xyz.html (con un clic de botón) llama a un wait() en un xyz externo.js. Esto wait() llama a 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;
  }
}

Y espera.php

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

Donde loadxml() llama código desde otro archivo PHP de la misma manera.

El loadxml() está funcionando bien de lo contrario, pero no está siendo llamado de la manera que lo quiero.

Author: mithunsatheesh, 2009-06-25

11 answers

En lo que respecta a PHP (o realmente, un servidor web en general), una página HTML no es nada más complicado que una cadena grande.

Todo el trabajo sofisticado que se puede hacer con lenguaje como PHP - lectura de bases de datos y servicios web y todo eso - el objetivo final es exactamente el mismo principio básico: generar una cadena de HTML*.

Su gran cadena HTML no se convierte en nada más especial que eso hasta que es cargado por un navegador web. Una vez que un navegador carga la página, luego sucede todo el resto de la magia: diseño, cosas de modelo de caja, generación de DOM y muchas otras cosas, incluida la ejecución de JavaScript.

Por lo tanto, usted no "llama a JavaScript desde PHP", usted "incluye una llamada a la función JavaScript en su salida".

Hay muchas maneras de hacer esto, pero aquí hay un par.

Usando solo PHP:

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

Escapando del modo php al modo de salida directa:

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

No necesita devolver un nombre de función ni nada por el estilo. Primero de todo, deja de escribir solicitudes AJAX a mano. Sólo lo estás haciendo difícil para ti. Obtener jQuery o uno de los otros marcos excelentes por ahí.

En segundo lugar, comprenda que ya va a ejecutar código javascript una vez que se reciba la respuesta de la llamada AJAX.

Aquí hay un ejemplo de lo que creo que estás haciendo con 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
}

Ahora, si está decidido a enviar un nombre de función desde PHP a la llamada AJAX, también puede hacerlo.

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

* o JSON o XML etc.

 323
Author: Peter Bailey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-04 14:35:28

Siempre solo uso echo "<script> function(); </script>"; o algo similar. técnicamente no estás llamando a la función en PHP, pero esto es lo más cerca que vas a conseguir.

 83
Author: GSto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-25 19:48:36

Por ahora (febrero 2012) hay una nueva característica para esto. Compruebe aquí

Ejemplo de código (tomado de la 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
Author: bertzzie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-25 12:48:45

No puedes. Puedes llamar a una función JS desde HTML outputted por PHP, pero eso es otra cosa.

 13
Author: Matthew Flaschen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-25 19:48:28

Eso no es posible. PHP es un lenguaje del lado del servidor y JavaScript del lado del cliente y realmente no saben mucho el uno del otro. Necesitará un intérprete JavaScript del lado del servidor (como Aptanas Jaxer). Tal vez lo que realmente quieres hacer es usar una Arquitectura Ajax (la función JavaScript llama al script PHP de forma asíncrona y hace algo con el resultado).

<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
Author: Daff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-25 19:57:12

Si quieres repetirlo para una ejecución posterior, está bien

Si desea ejecutar el JS y usar los resultados en PHP, use 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"); }');

Puede consultar aquí para obtener más información: ¿Qué son las extensiones en php v8js?

Si desea ejecutar HTML & JS y usar la salida en PHP http://htmlunit.sourceforge.net / es su solución

 6
Author: Pian0_M4n,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:06

PHP se ejecuta en el servidor. JavaScript se ejecuta en el cliente. Así que php no puede llamar a una función JavaScript.

 3
Author: Daniel Moura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-25 19:49:01

Puedes probar este también: -

    public function PHPFunction()
    {
            echo '<script type="text/javascript">
                 test();
            </script>'; 
    }
    <script type="text/javascript">
    public function test()
    {
        alert('In test Function');
    }
    </script>
 2
Author: umesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-19 11:05:53

Puede que no puedas hacer esto directamente, pero la biblioteca Xajax está bastante cerca de lo que quieres. Lo demostraré con un ejemplo. Aquí hay un botón en una página web:

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

Nuestra suposición intuitiva sería que xajax_addCity() es una función Javascript, ¿verdad? Bueno, bien y mal. Lo bueno que Xajax permite es que no tenemos ninguna función JS llamada xajax_addCity(), pero lo que sí tenemos es una función PHP llamada addCity() que puede hacer lo que PHP hace!

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

Piense en ello para un minuto. ¡Estamos invocando virtualmente una función PHP desde código Javascript! Ese ejemplo demasiado simplificado fue solo para abrir el apetito, una mejor explicación está en el sitio de Xajax, ¡diviértete!

 1
Author: Ham Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-05 09:04:14

Si desea llamar al método dentro de echo, debe encerrarlos entre comillas simples:

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

    echo "<td onclick='f();'>".Method calling."</td>";
 1
Author: Adiii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-07 12:30:49

Intenta así

<?php
 if(your condition){
     echo "<script> window.onload = function() {
     yourJavascriptFunction(param1, param2);
 }; </script>";
?>
 1
Author: Vivek ab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-17 07:34:24