domingo, 8 de mayo de 2011

Tutorial: Codeigniter y AJAX, manejando solicitudes.

A la hora de trabajar en codeigniter con eventos o llamadas AJAX pues el framework tiene herramientas muy precarias para trabajar con este tipo de solicitudes, trabajar con ello,  por ello nosotros tenemos que hacer nuestras propias funciones que nos ayuden a trabajar con este tipo de peticiones.(Eso es lo que a mi me gusta de este framework, que te ayuda en muchas cosas pero hay muchas otras que tu tienes que aprender, y que si ya lo tuvieras echo pues no aprenderías)

¿Como reconocer una llamada AJAX?

Lo primero que tenemos que estar claro es que una solicitud AJAX es casi igual que una solicitud normal, pero a la hora de programar es de suma importancia saber si es AJAX o no, porque de acuerdo al tipo de solicitud debemos retornar algo completamente diferente, lo cual si no se hace correctamente pues nos va a dar tronco de errores que nos puede costar hasta el trabajo, para solucionar esto hay varias opciones:
  • Enviar una variable en las solicitudes AJAX: a esto me refiero a que cuando hagamos una solicitud AJAX mandemos una variable más, y después en el código reconozcamos  si se envia o no.
  • Crear un método aparte solo para las llamadas AJAX:(la primera que use) una solución es crear un método aparte dentro del controlador para la llamada AJAX, es buena pero genera mas código innecesario y en ciertos casos repetir mucho código.
  • Utilizar HTTP_X_REQUESTED_WITH para saber si es AJAX o no:(la que uso actualmente) desde el javascript se envía una cabecera que se llama HTTP_X_REQUESTED_WITH que tiene como valor XMLHttpRequest, que permite del lado del servidor saber que esa es una llamada AJAX.

Ahora bien, yo comenzé con la segunda opción, la cual es una buena idea pero me genero muchos problemas porque a veces cuando hay algún problema con los datos enviados re-direcciono al inicio y muestro un mensaje de error, pero al hacer esto me mostraba la ventana de inicio completa, y eso no era lo que quería(eso me costo perder un trabajo). Pero después averiguando descubrí que en los últimos años a habido una estandarización en lo que se refiere a las llamadas AJAX en la mayoría de los framework donde envian una cabecera que se llama HTTP_X_REQUESTED_WITH y que con esta cabecera se puede averiguar fácilmente si es o no una llamada AJAX. Entonces con simplemte poner 1 linea de codigo averiguo si es o no una llamada AJAX:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')

Por supuesto como no vamos a andar pegando todo ese poco de lineas en todos los lugares donde los necesitemos podemos crear una librería o helper donde pongamos una función que nos devuelva el valor y así facilitarnos la vida, vamos a crear la librería ajax.php y pegamos este código:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Ajax{
 function isAjax()
 {
  return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
 }
}
Con eso en nuestro controlador solo debemos poner: $this->ajax->isAjax() y ya nos dira si es o no una solicitud ajax. Bueno asta aquí este tutorial, espero que les sea de utilidad y lo implementen en sus proyectos, me despido hasta la próxima.

2 comentarios:

  1. no es necesario crea una nueva biblioteca :P
    existe en la clase input
    $this->input->is_ajax_request()

    Saludos, buen blog

    ResponderEliminar
  2. Gracias por el comentario, tienes toda la razon, fue que lo saque de baamboinvoice, y pense que codeigniter no tendria.

    Esta muy bueno tu blog tambien.

    ResponderEliminar