fLIPIS
   

Llegados a este punto... cosas importantes


      
Llegados a este punto, es muy importante tener en cuenta lo siguiente: CUANDO UNA LLAMADA AJAX ESPERA RECIBIR UN ARRAY DE JSON Y NO LO RECIBE, NO SE EJECUTARÁ EL CALLBACK DE sucess(), SINO EL DE error(). Vamos a ver esto un poco mas, que es causa de muchos errores y quebraderos de cabeza para mucha gente en foros. Cambiemos la URL de la llamada AJAX a una página PHP en la que podremos este código:
   
phpAjax/error_json_service.php
   
<?php echo "Hola, mundo desde PHP"; ?>
      
Ahora, modificaremos nuestra llamada para contemplar un nuevo evento, error. El código de la llamada AJAX quedará como sigue:
   
error_json.php
   
$(document).ready(function() 
{
   $("a").click(function()
   {
      $.ajax({               
         url: "phpAjax/error_json_service.php",
         dataType: "json",
         success: function(data)
         {
            $("div").html(data);
         },
         error: function(XMLHttpRequest, textStatus, errorThrown)
         {
            alert('textStatus: ' + textStatus + '\nerrorThrown: ' + errorThrown);
         }
      });            
   });   
});
      
Lo que se ejecutará es la función error, y textStatus contendrá un literal de cadena "parsererror". ¿Qué significa esto? Básicamente si a una llamada AJAX le especificamos un tipo de retorno de JSON y no le devolvemos JSON en la vuelta de la llamada, el parser interno de JSON que tiene jQuery falla e intenta ejecutar el callback de error de la llamada AJAX. Es por esto que si no tenemos el callaback de error programado, le especificamos JSON y no se lo devolvemos, el servicio parecerá "colgado", lo que puede dar inmensos quebraderos de cabeza al no entender por qué el servicio no es accesible. Veamos ahora qué pasa cuando intentamos acceder a la clase IntegerAddServiceRequired sin pasarle argumentos, en una llamada AJAX. Quedará como sigue:
   
error_json.php
   
$("#link_2").click(function()
{
   $.ajax({               
      url: "phpAjax/IntegerAddServiceRequired.class.php",
      dataType: "json",
      success: function(data)
      {                  
         if(data["CODE"] == "OK")
         {
            $("div").html(data["DATA"]);
         }
         else
         {
            alert('Se produjo un error: ' + data["EXPLAIN"]);
         }
      },
      error: function(XMLHttpRequest, textStatus, errorThrown)
      {
         alert('textStatus: ' + textStatus + '\nerrorThrown: ' + errorThrown);
      }
   });            
});
      
A diferencia de en el anterior ejemplo, aquí hemos intentado acceder a una de las clases que heredaba de JSONWebServiceBase, con lo que la clase ha detectado que la llamada era por AJAX, y al no recibir los argumentos num1 y num2, devuelve el array de JSON con ["CODE"] = "ERROR". En este caso ["DATA"] nunca se llegará a acceder, puesto que no existe en el array y no se cumple la condición de que diga OK. Es importante que veamos que en ningún momento hemos entrado en el callback de error de la llamada. Esto es debido a que, aunque el acceso al servicio no era el adecuado, los datos devueltos si eran JSON, y por tanto interpretables por el callback de sucess. Es importante, repito que recordemos esto cuando estamos trabajando con este tipo de servicios.
      
Y hasta aquí hemos llegado en esta primera parte. Esperad la segunda para dentro de un tiempo, tratará sobre como utilizar jQuery, PHP y JSON para acceder a bases de datos y hacer operaciones contra otros servidores sin tener que mover ni un ápice la barra de recarga. Confío en que de algo haya servido el tutorial y os haya quedado mas claro como usar estas nuevas tecnologías web.