¿Hay alguna forma de ejecutar una función php a través de una función JS?
algo como esto:
<script type="text/javascript">
function test(){
document.getElementById("php_code").innerHTML="<?php
query("hello"); ?>";
}
</script>
<a href="#" style="display:block; color:#000033; font-family:Tahoma; font-size:12px;"
onclick="test(); return false;"> test </a>
<span id="php_code"> </span>
Básicamente, quiero ejecutar la función php query("hello")
, cuando hago clic en el href llamado "Prueba" que llamaría a la función php.
php
javascript
html
ajax
Jason Russell
fuente
fuente
<?php query("hello"); ?>
representado por php cuando se carga la página? si es así, entonces puede obtener la salida de laquery("hello")
función js.Respuestas:
Esto es, en esencia, lo que AJAX es para . Su página se carga y agrega un evento a un elemento. Cuando el usuario hace que se active el evento, digamos al hacer clic en algo, su Javascript usa el objeto XMLHttpRequest para enviar una solicitud a un servidor.
Después de que el servidor responde (presumiblemente con salida), otra función / evento de Javascript le da un lugar para trabajar con esa salida, incluyendo simplemente pegarla en la página como cualquier otra pieza de HTML.
Puede hacerlo "a mano" con JavaScript simple, o puede usar jQuery. Dependiendo del tamaño de su proyecto y situación particular, puede ser más sencillo usar simplemente Javascript.
JavaScript simple
En este ejemplo muy básico, enviamos una solicitud
myAjax.php
cuando el usuario hace clic en un enlace. El servidor generará contenido, en este caso "¡hola mundo!". Pondremos en el elemento HTML con el idoutput
.El javascript
// handles the click event for link 1, sends the query function getOutput() { getRequest( 'myAjax.php', // URL for the PHP file drawOutput, // handle successful request drawError // handle error ); return false; } // handles drawing an error message function drawError() { var container = document.getElementById('output'); container.innerHTML = 'Bummer: there was an error!'; } // handles the response, adds the html function drawOutput(responseText) { var container = document.getElementById('output'); container.innerHTML = responseText; } // helper function for cross-browser request object function getRequest(url, success, error) { var req = false; try{ // most browsers req = new XMLHttpRequest(); } catch (e){ // IE try{ req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { // try an older version try{ req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { return false; } } } if (!req) return false; if (typeof success != 'function') success = function () {}; if (typeof error!= 'function') error = function () {}; req.onreadystatechange = function(){ if(req.readyState == 4) { return req.status === 200 ? success(req.responseText) : error(req.status); } } req.open("GET", url, true); req.send(null); return req; }
El HTML
<a href="#" onclick="return getOutput();"> test </a> <div id="output">waiting for action</div>
El PHP
// file myAjax.php <?php echo 'hello world!'; ?>
Pruébelo: http://jsfiddle.net/GRMule/m8CTk/
Con una biblioteca de JavaScript (jQuery et al)
Podría decirse que es mucho código Javascript. Puede acortarlo ajustando los bloques o usando operadores lógicos más concisos, por supuesto, pero todavía están sucediendo muchas cosas allí. Si planeas hacer mucho de este tipo de cosas en tu proyecto, es mejor que tengas una biblioteca javascript.
Usando el mismo HTML y PHP de arriba, este es su script completo (con jQuery incluido en la página). He ajustado un poco el código para que sea más coherente con el estilo general de jQuery, pero entiendes la idea:
// handles the click event, sends the query function getOutput() { $.ajax({ url:'myAjax.php', complete: function (response) { $('#output').html(response.responseText); }, error: function () { $('#output').html('Bummer: there was an error!'); } }); return false; }
Pruébelo: http://jsfiddle.net/GRMule/WQXXT/
No se apresure a buscar jQuery todavía: agregar cualquier biblioteca es agregar cientos o miles de líneas de código a su proyecto con la misma seguridad que si las hubiera escrito. Dentro del archivo de la biblioteca jQuery, encontrará un código similar al del primer ejemplo, además de mucho más . Eso puede ser algo bueno, puede que no. Planifique y considere el tamaño actual de su proyecto y la posibilidad futura de expansión y el entorno o plataforma de destino.
Si esto es todo lo que necesita hacer, escriba el javascript simple una vez y listo.
Documentación
XMLHttpRequest
en MDN - https://developer.mozilla.org/en/XMLHttpRequestXMLHttpRequest
en MSDN: http://msdn.microsoft.com/en-us/library/ie/ms535874%28v=vs.85%29.aspxjQuery.ajax
- http://api.jquery.com/jQuery.ajax/fuente
PHP se evalúa en el servidor; javascript se evalúa en el cliente / navegador, por lo que no puede llamar a una función PHP desde javascript directamente . Pero puede emitir una solicitud HTTP al servidor que activará una función PHP, con AJAX.
fuente
La única forma de ejecutar PHP desde JS es AJAX. Puede enviar datos al servidor (por ejemplo, GET /ajax.php?do=someFunction) y luego en ajax.php escribe:
function someFunction() { echo 'Answer'; } if ($_GET['do'] === "someFunction") { someFunction(); }
y luego, capte la respuesta con JS (estoy usando jQuery para hacer solicitudes AJAX)
Probablemente necesitará algún formato de respuesta. Consulte JSON o XML, pero JSON es fácil de usar con JavaScript. En PHP puede usar la función json_encode ($ array); que obtiene una matriz como argumento.
fuente
Recientemente publiqué un complemento jQuery que le permite realizar llamadas a funciones PHP de varias maneras: https://github.com/Xaxis/jquery.php
Uso de ejemplo simple:
// Both .end() and .data() return data to variables var strLenA = P.strlen('some string').end(); var strLenB = P.strlen('another string').end(); var totalStrLen = strLenA + strLenB; console.log( totalStrLen ); // 25 // .data Returns data in an array var data1 = P.crypt("Some Crypt String").data(); console.log( data1 ); // ["$1$Tk1b01rk$shTKSqDslatUSRV3WdlnI/"]
fuente