¿Cómo llamar a una función de JavaScript desde PHP?
¿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.
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.
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.
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);
}
?>