2011-08-23 40 views
68

¿Hay alguna manera de ejecutar una función php a través de una función JS?Llamar a la función php desde JavaScript

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 para ejecutar la función php query("hello"), al hacer clic en el href llamada "prueba" que llame a la función php.

+4

simplemente no hay, no hay manera de hacer esto, excepto una llamada al método requerido usando ajax. – TheVillageIdiot

+9

Ya sabe: PHP se ejecuta en el servidor, pero ¿JS en el cliente? Esto no puede funcionar de esta manera. – KingCrunch

+0

espera de espera, no es ' 'Presentado por php cuando la página está cargada? si es así, entonces puede obtener la salida de 'query (" hello ")' en la función js. – TheVillageIdiot

Respuesta

131

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 desencadene el evento, digamos haciendo clic en algo, su Javascript usa el XMLHttpRequest object 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 pegarlo en la página como cualquier otra pieza de HTML.

Puedes hacerlo "a mano" con Javascript simple, o puedes usar jQuery. Dependiendo del tamaño de su proyecto y su situación particular, puede ser más simple simplemente usar Javascript plano.

Llanura Javascript

En este ejemplo muy básico, nos envíe una solicitud de myAjax.php cuando el usuario hace clic en un enlace. El servidor generará algunos contenidos, en este caso, "¡mundo hello!". Pondremos en el elemento HTML con el id output.

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 y otros)

Podría decirse que es una gran cantidad de código Javascript. Puedes acortar eso apretando los bloques o usando más operadores de lógica concisa, por supuesto, pero todavía hay muchas cosas sucediendo allí. Si planeas hacer mucho de este tipo de cosas en tu proyecto, es mejor que tengas una biblioteca de JavaScript.

Usando el mismo HTML y PHP desde arriba, esta es la secuencia de comandos completa (con jQuery incluido en la página). He reforzado el código un poco para ser más consistente con estilo general de jQuery, pero usted consigue la idea:

// handles the click event, sends the query 
var 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 cabo simplemente para jQuery aún: agregar cualquier biblioteca aún agrega 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, más un 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 objetivo.

Si esto es todo lo que necesita hacer, escriba el javascript simple una vez y listo.

Documentación

+1

-1, media respuesta, OP preguntó cómo llamar a una función php desde javascript. Pou solo mostró cómo llamar a una PÁGINA de php. Necesita agregar variables de publicación en la llamada ajax y php para verificar esas variables de publicación y luego llamar a esa función de php si existen esas variables de publicación. –

+5

@Hanoncs Con arreglos casi infinitos de código del lado del servidor, no es constructivo ni siquiera posible adivinar qué arquitectura está utilizando el OP. Tampoco está relacionado con el enunciado inmediato del problema, ya que el OP no hace referencia a POST (o GET) ni a la necesidad de pasar valores. Creo que su voto a favor está fuera de lugar, y no añadiré a mi respuesta especulaciones arbitrarias sobre un tema que no está contenido en el PO.Gracias por los comentarios. –

13

PHP se evalúa en el servidor; javascript se evalúa en el cliente/navegador, por lo tanto, no puede llamar a una función de PHP desde javascript directamente. Pero puede emitir una solicitud HTTP al servidor que activará una función PHP, con AJAX.

+2

@Hanoncs: Esta ** es ** la respuesta. OP preguntó si puede ejecutar una función PHP a través de JS. La respuesta es: ** no puedes **. Si él hubiera preguntado si puede emitir una solicitud HTTP que haga que el servidor web active un script PHP que ejecutará una función PHP, entonces sí ** ** que ** es posible. Pero él no pidió esto, ergo, no escribo datos irrelevantes. – Dor

+6

Jaja vamos hombre, sabes que eso es lo que el OP significaba con su pregunta. si supiera cómo explicarlo exactamente así, ya sabría cómo hacerlo. –

10

La única forma de ejecutar PHP desde JS es AJAX. Puede enviar datos al servidor (por ejemplo, GET /ajax.php?do=someFunction) después en ajax.php se escribe:

function someFunction() { 
    echo 'Answer'; 
} 

if ($_GET['do'] === "someFunction") { 
    someFunction(); 
} 

y luego, coger la respuesta con JS (estoy usando jQuery para realizar solicitudes AJAX)

Probablemente necesite algún formato de respuesta. Consulte JSON o XML, pero JSON es fácil de usar con JavaScript. En PHP puedes usar la función json_encode ($ array); que obtiene una matriz como argumento.

2

que ha publicado recientemente un plugin de jQuery que le permite realizar funciones de PHP de varias maneras: https://github.com/Xaxis/jquery.php

ejemplo de uso 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/"] 
+4

Aparte del obvio sesgo que la gente tiene con respecto a llamar funciones de PHP a través de JavaScript, explíqueme por qué mi respuesta ha sido rechazada tanto como lo ha hecho. Estoy respondiendo legítimamente a la pregunta con una solución, ¿no es así? – Xaxis

-1

PHP se evalúa en el servidor ; javascript se evalúa en el cliente/navegador, por lo tanto, no se puede invocar una función de PHP directamente desde javascript. Pero puede emitir una solicitud HTTP al servidor que activará una función PHP, con AJAX.

Utilizando el AJAX llamando podemos llamar a la función PHP, usando el POST y GET métodos,

+1

wow has copiado y pegado la respuesta de alguien más. downvote. – jdmdevdotnet

Cuestiones relacionadas