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

Resuelto Zeeshan Rang asked hace 54 años • 12 respuestas

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

<?php

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

El siguiente código es de xyz.html (al hacer clic en un botón), llama a en un xyz.jswait() externo . Esto llama a wait.php.wait()

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 al código de otro archivo PHP de la misma manera.

Por lo loadxml()demás, funciona bien, pero no se llama como quiero.

Zeeshan Rang avatar Jan 01 '70 08:01 Zeeshan Rang
Aceptado

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

Todo el trabajo sofisticado que puede hacer con un 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 la carga un navegador web. Una vez que un navegador carga la página, ocurre toda la demás magia: diseño, elementos del modelo de caja, generación de DOM y muchas otras cosas, incluida la ejecución de JavaScript.

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

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

Usando solo PHP:

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

Escapar del modo php al modo de salida directa:

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

No es necesario devolver el nombre de una función ni nada por el estilo. En primer lugar, deje de escribir solicitudes AJAX a mano. Sólo te lo estás poniendo difícil a ti mismo. Obtenga jQuery o uno de los otros excelentes marcos que existen.

En segundo lugar, comprenda que ya ejecutará el código javascript una vez que 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 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
}

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.

Peter Bailey avatar Jun 25 '2009 19:06 Peter Bailey

Yo siempre 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 parecido que podrás conseguir.

GSto avatar Jun 25 '2009 19:06 GSto

Por ahora (febrero de 2012) hay una nueva característica para esto. Chequea 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);
}

?>
bertzzie avatar Feb 25 '2012 12:02 bertzzie