|
||||
|
||||
Llegados a este punto... cosas importantesLlegados 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.
|
||||
|
||||