2011-05-12 18 views
13

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

index.php

<select id="year_list" name="year_list" onchange="check_year_event('year_list', 'event_list');" > . . . </select> 

<select id="event_list" name="event_list" onchange="check_year_event('year_list', 'event_list');" > . . . </select> 
. 
. 
. 
<?php 
function checkYearandEvent($year, $event) { 
    $year_event = mysql_query("SELECT * FROM year_event WHERE year = '$event' AND event = '$event'") 

    if (mysql_num_rows($year_event) > 0) { 
    // do this 
    } 

} 
?> 

myscripts.js

function check_year_event(year_id, event_id) { 
var year = document.getElementById(year_id).value; 
var event = document.getElementById(event_id).value; 

// call PHP function (but I don't know how): checkYearandEvent(year, event); 

} 

Mi pregunta es ¿cómo puedo llamar a la función PHP cada vez que el usuario cambia el valor de cualquiera de los select elemento.

+0

Primero lea este artículo: http://answers.yahoo.com/question/index?qid=20090602184659AAjObIj – Marcin

+14

Yahoo responde realmente? –

+1

@RocketHazmat Sé que esto es antiguo pero LOL – MonkeyZeus

Respuesta

8

Tienes que usar ajax.Hay un ejemplo básico:

myscripts.js

function AjaxCaller(){ 
    var xmlhttp=false; 
    try{ 
     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
    }catch(e){ 
     try{ 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     }catch(E){ 
      xmlhttp = false; 
     } 
    } 

    if(!xmlhttp && typeof XMLHttpRequest!='undefined'){ 
     xmlhttp = new XMLHttpRequest(); 
    } 
    return xmlhttp; 
} 

function callPage(url, div){ 
    ajax=AjaxCaller(); 
    ajax.open("GET", url, true); 
    ajax.onreadystatechange=function(){ 
     if(ajax.readyState==4){ 
      if(ajax.status==200){ 
       div.innerHTML = ajax.responseText; 
      } 
     } 
    } 
    ajax.send(null); 
} 

function check_year_event(year_id, event_id) { 
var year = document.getElementById(year_id).value; 
var event = document.getElementById(event_id).value; 

    callPage('file.php?year='+year+'&'+'event=+'+event,document.getElementById(targetId)); 
} 

archivo.php

<?php 

    function checkYearandEvent($year, $event) { 
     $year_event = mysql_query("SELECT * FROM year_event WHERE year = '$event' AND event = '$event'") 

     if (mysql_num_rows($year_event) > 0) { 
     // do this 
     } 

    } 
    echo checkYearandEvent($_GET['year'], $_GET['event']); 
?> 
+0

¿Qué pasa si 'checkYearandEvent()' necesita devolver algo a una variable de JavaScript? –

+0

Puede imprimir '

7

No podrá hacer esto de la forma en que podría estar esperando. PHP se ejecuta en el servidor, antes de que el navegador reciba el HTML. Por otro lado, JavaScript se ejecuta en el navegador y no tiene conocimiento del PHP (o cualquier otro idioma del lado del servidor) utilizado para crear el HTML.

Para "llamar" una función php, debe enviar una solicitud al servidor (a menudo denominada AJAX). Por ejemplo, podría tener un script checkYear.php que verifica el evento y devuelve un poco de HTML que indica si el chequeo fue exitoso. Cuando el fragmento de HTML vuelve al JavaScript, lo inyecta en la página.

Espero que esto ayude!

2

JavaScript es un lenguaje del lado del cliente, PHP es un lenguaje del lado del servidor. Por lo tanto, no puede llamar a las funciones PHP directamente desde el código JavaScript. Sin embargo, lo que puede hacer es publicar una solicitud AJAX (llama un archivo PHP detrás de las escenas) y usar eso para ejecutar su código PHP y devolver cualquier información que requiera a JavaScript.

1

Básicamente, está mezclando scripting del lado del servidor (PHP) y del lado del cliente (JS).

Sin embargo es posible, gracias, por ejemplo. a AJAX. Debido a que no fue específico acerca de lo qué necesita exactamente que hacer después de los selectos cambios de la caja, lo único que se puede apuntar a algunos recursos y proponer lo siguiente:

  • aprender y comenzar a usar jQuery (jquery.com) - que ayudará usted comienza y mantiene la compatibilidad entre navegadores,
  • aprenda cómo hacer solicitudes AJAX (por ejemplo, en la función que acaba de disparar cuando se desencadenó el evento onchange) - por ej. utilizando .post() función jQuery,
  • aprender cómo devolver datos desde PHP (por ejemplo. mediante json_encode() en PHP, pero el HTML puro también está bien) y usarlo en JS,
1

Puede haber muchas maneras de hacer esto . El que prefiero, está utilizando el objeto MooToolsRequest.

Por ejemplo, usted tiene un script llamado ajaxCallable.php, que recibe a través de $_REQUEST variables de algunos parámetros, y luego lo hace (en el lado Javascript):

function check_year_event(year_id, event_id) { 
    var year = document.getElementById(year_id).value; 
    var event = document.getElementById(event_id).value; 

    var myRequest = new Request({method: 'get', url: 'ajaxCallable.php'}); 
    myRequest.send('yearVar=' + year + '&eventVar=' + event); 
} 

entonces, su ajaxCallable.php será capaz de acceder a las variables : $_REQUEST['yearVar'] y $_REQUEST['eventVar'].

0

yo estaba trabajando en un proyecto de esta semana y se acercó con una manera fácil llamar a un script php desde un onclick(). Dice así.

que definen una llamada onclick() en este caso en un div llamado "sidebarItem" ...

<a><div class="sidebarItem" onclick="populate('#content', 'help', 'open')">Click me for new content</div></a> 

Entonces hice un poco simple función de JS que carga un archivo externo en el contenedor de destino ...

function populate($container, $page, $item){ 
$($container).load('cyclorama/includes/populate.php?$page='+$page+'&$item='+$item);} 

Luego escribo un pequeño archivo php que obtiene $ $ y $ artículo, consulta la base de datos y devuelve el nuevo contenido.

<?php 
$page = $_GET['$page']; 
$item = $_GET['$item']; 
$getContentQuery = "SELECT content FROM myTable WHERE page='".$page."' AND item='".$item."'"; 
$content = mysql_query($getContentQuery, $db); 
$myContent = mysql_fetch_assoc($content); 
echo $myContent['content'];?> 

La secuencia de comandos php hace eco del nuevo contenido y se carga en el contenedor. Creo que hay muchos lugares a los que esto podría servir. Me interesaría averiguar si hay razones obvias para NO hacer esto. No usa AJAX solo javascript y php, pero es rápido y relativamente fácil.

Cuestiones relacionadas