Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/09/2011, 15:44
ocp001a
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 7 meses
Puntos: 528
Respuesta: [aporte] AJAX en 10 minutos con xajax

Cita:
Iniciado por maycolalvarez Ver Mensaje
personalmente tuve muy malas experiencias con xajax y en general prefiero y recomiendo utilizar un FW backend MVC e implementar jQuery, ExtJS etc.
Los Fw que mencionas tengo entendido que están fuertemente orientados a Javascript, de lo que deduzco que tú lo usas mucho, de ser así no me extraña que xajax no te convenciera, pues xajax se mete muy poco con js...

Gracias por tu comentario.


En este post mostraré cómo pasar parámetros a nuestras funciones php llamadas vía ajax.


Los tipos de datos que podemos pasar como parámetros a nuestras funciones con xajax, son básicamente los mismos que podemos pasar en cualquier llamada javascript:

Números, cadenas, operaciones y valores de objetos de nuestro html. Además, xajax permite fácilmente enviar todo un formulario a nuestras funciónes.

Veamos el siguiente código:

Código PHP:
Ver original
  1. <?php
  2. @require_once("xajax/xajax_core/xajax.inc.php");//la arroba es para anular la notificacion de uso de instrucciones obsoletas
  3. $xajax = new xajax();//Creamos un objeto xajax
  4. //$xajax->configure("debug", true);//si queremos hacer un debug, descomentamos esta linea
  5. $xajax->register(XAJAX_FUNCTION,"mifuncion");//registramos nuestra función o funciones que llamaremos via ajax
  6. $xajax->processRequest();//Indicamos que xajax procesará las peticiones ajax que registramos.
  7. $xajax->configure('javascript URI','xajax');
  8. echo"
  9. <html>
  10. <head>";
  11. $xajax->printJavascript("xajax");//Imprimimos el código JS que inicia Xajax
  12. echo"
  13. </head>
  14. <body>
  15. <div id=\"mensaje\"></div>
  16. <br/>
  17. <form name=\"prueba\" id=\"prueba\">
  18.     <input type=\"text\" name=\"nombre\" id=\"nombre\" onblur=\"xajax_mifuncion(this.value,'nombre');\">
  19.     <select name=\"colores\" id=\"colores\" onchange=\"xajax_mifuncion(this.value,'color');\">
  20.         <option value=\"rojo\">rojo</option>
  21.         <option value=\"azul\">azul</option>
  22.         <option value=\"verde\">verde</option>
  23.     </select>
  24.     <input type=\"button\" value=\"Enviar datos\" onclick=\"xajax_mifuncion(xajax.getFormValues('prueba'));\"/>
  25. </form>
  26.     <input type=\"button\" value=\"suma de 2 + 3\" onclick=\"xajax_mifuncion(2+3,'suma');\"/>
  27. </body>
  28. ";
  29. function mifuncion($valor,$origen=""){
  30.     $respuesta = new xajaxResponse();//Creamos una respuesta tipo xajax
  31.     if(!is_array($valor))//si no recibimos el formulario
  32.         $respuesta->assign("mensaje","innerHTML","Usted indico el $origen $valor");//regresamos un mensaje de texto simple
  33.     else{
  34.         $respuesta->assign("mensaje","innerHTML","Usted indico los valores Nombre: $valor[nombre] y Color: $valor[colores]");//regresamos un mensaje de texto mas elaborado
  35.     }
  36.     return $respuesta;
  37. }
  38. ?>
Es muy similar al anterior, sólo que ahora nuestro html inicial contiene lo siguiente:
  • Un formulario con el id prueba
  • Una caja de texto sencilla con el id nombre
  • Un combo o select con el id colores y una lista de tres colores
  • Un botón que envía nuestro formulario completo
  • Un botón que llama nuestra función enviando una suma (2+3)


Como verás, es posible llamar nuestra función con cualquier evento existente en js.

Ahora bien, analizando el input:
el input al ser abandonado (evento onblur) llama nuestra función pasándole como parámetro su propio valor (this.value), lo mismo que ocurre con el select, al pasar su propio valor al cambiar de selección (evento onchange).

El botón que envía todo el formulario lo hace mediante la instrucción xajax.getFormValues, la cual permite enviar todo el contenido de un formulario como si de un submit se tratara.

Finalmente el último botón envia una operación (2+3).

Ahora veamos el código de nuestra función ajax:
function mifuncion($valor,$origen=""){
Aquí por si no lo sabías, estamos definiendo que nuestra función puede recibir dos parámetros ($valor y $origen), además, si no recibe nada dentro de la variable $origen, le colocará una cadena vacía.

if(!is_array($valor))
Cualquier parámetro que enviemos a nuestra función ajax será recibida dentro de una variable simple, a menos que enviemos un formulario, en tal caso, xajax nos enviará un arreglo (array) muy similar por no decir idéntico a cualquier array que recibamos vía $_POST, sólo que el array tendrá el nombre que le hayamos dado al declarar nuestra función. En nuestro caso, si enviamos el formulario, lo recibiremos en la variable $valor, por esto primero comprobamos si $valor es un arreglo o no.

Si no es un arreglo, regresamos como respuesta en el div mensaje un mensajito muy simple, con el contenido de las dos variables recibidas ($valor y $origen).

Si es un arreglo, es que nos enviaron el formulario, es ese caso devolveremos un mensaje más elaborado, con los contenidos del formulario.

Finalmente, no habría ni que mencionar que con el botón de suma nuestra función recibe desde el principio el valor 5 (suma de 2+3) pues la operación ya estaba hecha por javascript.

Bien, es todo por el momento, cualquier duda por favor comentarla, en el siguiente post mostraré como regresar más de una respuesta en la misma función xajax.