En este artículo veremos ejemplos interesantes que utilizarán eventos Ajax, como son error, success y complete. Pero sobre todo haremos inciso en los parámetros que podemos recibir en las funciones que escribimos para definir las acciones a realizar por cada evento, ya que a través de ellos podemos acceder a información interesante que quizás nos sea necesaria en algunos casos.
En el siguiente ejemplo veremos un caso de uso del evento error.
var url = prompt("Dame la URL a la que quieres que acceda", "contenido-ajax.html");
var objajax = $.get(url);
objajax.error(function(o, estado, excepcion){
alert("Error detectado: " + estado + "\nExcepcion: " + excepcion);
o.complete(function(){alert("Solicitud completada evento cargado desde el evento de error!")});
});
objajax.complete(function(){alert("Solicitud completada")});
Como se ve, primero preguntamos al usuario, a través de una caja de "prompt", la URL a la que desea acceder y luego realizamos la solicitud Ajax de dicha URL con $.get(). Al mostrarse la caja "prompt" y el usuario poder escribir cualquier cosa, se puede colocar cualquier ruta que se desee, incluso nombres de páginas inexistentes, para que se produzca un error en la conexión Ajax.
Pero lo que queremos remarcar está justo después, que es la llamada al método error(), en la que indicamos la función a ejecutar cuando se produzca un error en la conexión. A ese método le enviamos la función a ejecutar cuando se produzca el error y vemos que se le pasan tres parámetros. Con los parámetros "estado" y "excepcion" simplemente los mostramos en una caja de alert, para poder verlos. Con el parámetro "o", que es una referencia al objeto Ajax que se está ejecutando, podemos, por hacer alguna cosa, como cargar otro evento. En este caso cargamos una función adicional al evento "complete", y digo adicional porque en la última línea de este código ya habíamos cargado algo al evento complete.
Por tanto, si se ha entendido bien, se comprobará que:
Es interesante el primer parámetro, donde recibimos los datos de respuesta de esta solicitud y si lo deseamos, podemos operar con ellos del mismo modo que si estuviéramos en la función que gestiona la respuesta Ajax. El segundo parámetro es simplemente un texto descriptivo del estado de la solicitud, que si ha tenido éxito será algo como "success".
Antes de ver un ejemplo, pasemos a explicar el otro evento que nos queda.
Veamos un ejemplo a continuación, en el que hacemos un pequeño "demo" de cómo podría funcionar un botón "me gusta".
var objajax = $.get("incrementa-me-gusta.php", {elemento: 32333});
objajax.error(function(){
$("#gusto").append('<span class="error">Error al contabilizar el me gusta</span>');
});
objajax.success(function(respuesta,textostatus){
$("#gusto").html("Contigo ya son " + respuesta + " personas a las que les gusta!");
$("#gusto").addClass("gustado");
$("#estadosuccess").html(textostatus);
});
objajax.complete(function(oa, textostatus){
$("#estadocomplete").html(textostatus);
});
Como se puede ver, se inicia una solicitud Ajax con $.get(), pero no colocamos en la solicitud nada a realizar cuando ésta se reciba, pues más adelante definiremos qué hacer en caso que se produzca un error o en caso que se ejecute con éxito.
Con el método error() definimos el evento a ejecutarse en el caso que la consulta a la página incrementa-me-gusta.php no pueda ser realizada. En ese caso, simplemente mostramos un mensaje de error.
Con el evento success, definido por medio del método success(), definimos las acciones a realizar en caso que se ejecute la solicitud con éxito. Como se puede ver, en el evento se reciben dos parámetros, uno con la respuesta y el segundo con el texto de estado. Con la respuesta podemos hacer acciones, al igual que con el texto de estado. Ambos datos los mostramos en la página en distintos lugares.
Luego se define el evento complete, que recibe también un par de parámetros. Por un lado tenemos el objeto ajax que ha recibido la solicitud, con el que no hacemos nada. Luego tenemos el texto de estado, que simplemente lo mostramos en la página.
El ejemplo se puede ver en una página aparte.
Por el momento es todo lo que queríamos mostrar del método jQuery.get(), así que ya en el próximo artículo veremos una función parecida pero que hace las conexiones Ajax por medio de POST en vez de GET, con el objetivo final de mostrar cómo enviar formularios por Ajax con jQuery.