JASoft.org

AJAX (V): Posibles problemas (II) - Gestión de errores y llamadas que no vuelven

AJAX (V): Posibles problemas (II) - Gestión de errores y llamadas que no vuelven
Siguiendo con la lista de problemas que dan en este tipo de aplicaciones asíncronas AJAX, nos toca analizar los posibles errores de comunicaciones que se pueden producir. No podemos asumir que la llamadas que hagamos al servidor van a funcionar siempre. Puede haber un error en el código del servidor, puede haber cambiado la URL y no aparecer la página que llamamos, haber errores de permisos, etc... Lo que pase en el servidor está fuera de nuestro control. Ante eso hay que estar preparado. La forma de controlar estas situaciones es, como en cualquier componente de comunicaciones por HTTP, a través del código de estado que devuelva el servidor. La propiedad 'status' del objeto XmlHttpRequest nos proporciona esta información. De hecho ya hemos tenido en cuenta este asunto en los ejemplos anteriores que habíamos desarrollado: function finCarga(){   if (http.readyState == 4) //4: completado   {      if (http.status == 200... [Más]

AJAX (IV): Posibles problemas (I) - Llamadas fuera de nuestro dominio

AJAX (IV): Posibles problemas (I) - Llamadas fuera de nuestro dominio
Con este título en dos partes continuamos con la serie dedicada a AJAX en donde se había quedado. Los principales problemas que nos podemos encontrar al usar técnicas AJAX en nuestras aplicaciones Web son los siguientes: Llamadas fuera del dominio. Llamadas que producen errores o que no vuelven jamás. Envío de datos al servidor. Las malditas/benditas cachés. En este post trataremos el primer problema y dejamos para los siguientes los restant. Una vez que uno empieza a juguetear con las posibilidades de AJAX enseguida se nos ocurren ideas geniales para sacarle partido. La más obvia, claro está, es la de utilizar las técnicas para acceder desde el cliente a ciertos servicios web de utilidad ubicados en Internet que para eso están. Así, dado que los Servicios Web están basados en XML es muy fácil procesar lo que devuelven con las técnicas descritas para, por ejemplo, realizar búsquedas en Google o en Amazon con su API, enviar "posts" a nuestro blog, etc... Otra aplicació... [Más]

AJAX (III): Funciones para obtener datos

AJAX (III): Funciones para obtener datos
Siguiendo con el post anterior sobre AJAX y una vez estudiado el objeto XMLHttpRequest vamos a definir algunas funciones que nos serán útiles para realizar cargas de datos en cualquier navegador. Lo primero que necesitaremos siempre es obteneruna referencia a un objeto XMLHttpRequest. No se obtiene de la misma manera en Internet Explorer que en los demás navegadores, por lo que debemos tener en cuenta esas diferencias. En IE se obtiene a partir de un objeto ActiveX. En Firefox, Opera, Safari y compañía es una clase integrada del modelo de objetos del navegador. Sabiendo esto es fácil hacer una función genérica para obtener una referencia a un objeto XMLHttpRequest que funcione en todos los navegadores: function getHttpRequest(){ var httpReq;  //Si es Mozilla, Opera, etc... if (window.XMLHttpRequest) {  httpReq = new XMLHttpRequest(); } else //Internet Explorer lo expone como control Active X {  httpReq = new ActiveXObject(... [Más]

AJAX (II): El objeto XMLHttpRequest

AJAX (II): El objeto XMLHttpRequest
Lo prometido es deuda y hoy seguimos (o casi empezamos) con el estudio de las aplicaciones AJAX. Aparte de saber HTML y JavaScript, el primer objeto que debemos conocer para hacer aplicaciones AJAX es XMLHttpRequest. Si has utilizado alguna vez las bibliotecas MSXML con Visual Basic 6.0 o ASP 3.0 es probable que ya lo conozcas. Aunque en el caso de Internet Explorer se sigue usando este objeto ActiveX en el resto de los navegadores (Firefox, Opera, Safari...)  este objeto forma parte ya de las clases nativas del navegador. Su utilidad básica es la de enviar peticiones (tanto GET como POST) a Urls mediante el protocolo HTTP. Los métodos y propiedades básicos que debemos conocer son los siguientes(los corchetes indican parámetros opcionales): open(metodo, URL, [asincrono], [usuario], [clave]): sirve para abrir una conexión al servidor. No envía ni obtiene información, sólo se conecta. El tercer parámetro es booleano y sirve para indicar si la conexión se realizará asíncrona... [Más]

La palabra de moda: AJAX - ¡hagamos un ejemplo!

La palabra de moda: AJAX - ¡hagamos un ejemplo!
Si hay una palabra de moda últimamente en el mundillo (o submundo, que también vale) de la programación Web esta es sin duda AJAX. Se trata de un acrónimo que significa Asynchronous JavaScript And XML y sienta las bases de las nuevas aplicaciones dinámicas que no recargan la página, como por ejemplo GMail o MSN Earth (ahora Local Live) entre otras muchas. Se basa en el uso de un objeto llamado XMLHttpRequest que como puedes imaginar sirve para hacer peticiones de documentos XML a través del protocolo HTTP y que apareció por primera vez en las bibliotecas XML de Microsoft (MSXML). Con este objeto se piden documentos XML que luego es posible manipular mediante código JavaScript desde dentro de una página y mostrar resultados dentro de capas (div) de la misma. Esto es lo básico pero da mucho de sí . Aunque ahora parece que los chicos de Google han inventado la pólvora lo cierto es que el concepto original de esta tecnología fué creado por Microsoft (se llamaba Remote Scripting y he... [Más]

Pequeño "gadget" para programadores: CassiniAqui

Pequeño "gadget" para programadores: CassiniAqui
El otro día me topé de casualidad con un post de Daniel Fisher que hablaba de una pequeña utilidad que había escrito para lanzar el servidor Web que viene con Visual Studio 2005 para cualquier carpeta. Su código lo había adaptado de otro hecho por Chris Fraizer. El caso es que la he retocado un poco, la he "castellanizado" y he hecho que funcione bien el lanzamiento final de Internet Explorer, además de ofrecer un archivo de registro válido. El resultado lo puedes descargar desde aquí (11,8 KB), y el código fuente desde aquí (27,1 KB). Descarga el primer archivo con el programa y descomprímelo en C:\Windows o análogo (en el raíz de tu sistema, vamos, aunque puede ser en cualquier carpeta que esté en el "path" del sistema). Haz doble clic sobre el archivo CassiniAqui.reg. A partir de este momento tienes una nueva opción en el menú contextual de las carpetas en el explorador de Windows: "Lanzar la web de esta carpeta" Si utilizas esta opción se abrirá el servidor integrado que viene... [Más]

Añadido a mi anterior post sobre el uso de ObjectDataSource con DataSets tipados

Añadido a mi anterior post sobre el uso de ObjectDataSource con DataSets tipados
En mi anterior 'post' titulado Usar un ObjectDataSource con un DataSet tipado en ASP.NET 2.0 se me olvidó comentar un detalle. Si aún a pesar de lo que te digo quieres usar el ObjectDataSource para realizar actualizaciones a través de un DataSet tipado puedes conseguir que funcione. Para ello desmarca la opción de "Actualizar campos de la base de datos" en el diálogo de configuración del TableAdapter que vayas a utilizar enlazado a este objeto. Esto elimina el último parámetro del método Update, teniendo por tanto el número de parámetros correcto y funcionará sin problemas. O casi... El inconveniente ahora es que los valores auto-generados por la base de datos no se recuperarán tras la actualización o añadido de datos. Por ejemplo los autonuméricos. Esto tiene una implicación que puede engañar a mucha gente, incluso a programadores experimentados. Lo relato a continuación. ATENCIÓN: Puede que si lo usas y añades un registro, de repente, veas que sí tienes el autonumérico correcto en... [Más]

Usar un ObjectDataSource con un DataSet tipado en ASP.NET 2.0

Usar un ObjectDataSource con un DataSet tipado en ASP.NET 2.0
El objeto ObjectDataSource que viene con ASP.NET 2.0 es estupendo ya que permite usarlo como origen de datos para enlazar rejillas y otros controles (como DetailsView por ejemplo) con objetos de negocio. Esto va muy bien, por ejemplo, para enlazarlo con servicios Web ubicados en otras máquinas o con componentes de la capa de negocio que encapsulan las validaciones y verificaciones de seguridad aislándonos de la capa de datos (al interesado en estos temas le recomiendo el curso "Desarrollo de aplicaciones de datos en N-Capas con .NET 1.x y 2.0" de campusMVP). Por otro lado tenemos la potencia del nuevo modelo de TableAdapters que va unido a los nuevos DataSet tipados que se crean visualmente en Visual Studio 2005. Estos enlazan los DataSet tipados con el propio acceso a datos y, en la práctica, constituyen por si mismos una verdadera capa de datos, sin necesidad de escribirla nosotros como pasaba en versiones anteriores del entorno. La verdad es que son muy potentes y encima independ... [Más]

Añadiendo parámetros a consultas desde ADO.NET 2.0 y porqué desaparecerá en el futuro el método clásico

Añadiendo parámetros a consultas desde ADO.NET 2.0 y porqué desaparecerá en el futuro el método clásico
Este tema me lo ha recordado hoy por la mañana un alumno de mi curso de "Técnicas de escritura de código seguro" de campusMVP. Me parece muy interesante comentarlo aquí y de paso contestarle a él el porqué de que ocurra... (Gracias por recordármelo, Iván). Resulta que en ADO.NET 1.x (ya "clásico"), estamos acostumbrados a hacer algo similar a lo siguiente: SqlCommand cmd = new SqlCommand("SELECT * FROM Tabla WHERE campo = @Parametro");cmd.Parameters.Add("@Parametro", 1); suponiendo que, por ejemplo, el parámetro "@Parametro" es un valor numérico. Hasta aquí todo normal. El caso es que si en un programa escrito con ADO.NET 2.0 escribimos exactamente lo  mismo, aunque funcionará por compatibilidad, el compilador y el propio entorno de Visual Studio nos darán un aviso diciendo que el método 'Add' está obsoleto (deprecated en inglés) y que es mejor que usemos el método AddWithValue. ¿Por qué este cambio tan aparentemente arbitrario? De hecho en Microsoft dicen que en versiones poste... [Más]

Llamadas asíncronas a servicios web con .NET 2.0

Llamadas asíncronas a servicios web con .NET 2.0
En la versión 1.x de .NET, cuando generábamos un proxy para acceder al uso de un servicio Web, para cada método disponible en el servicio se generaban una pareja de métodos para lamadas asíncronas. Estos métodos se llamaban igual que el método original pero su nombre comenzaba por Begin y End respectivamente. Por ejemplo, si teníamos un método llamago GetClientes, se generaban los métodos BeginGetClientes y EndGetClientes. Con ellos se podían realizar llamadas asíncronas al método siguiendo una mecánica coherente con la que existe en el resto de la plataforma. Sin embargo en la versión 2.0, el generador de proxies a servicios Web utiliza una estrategia diferente. Los métodos Begin y End ya no aparecen y a más de uno le puede despistar esto. Lo cierto es que en esta nueva versión es mucho más sencillo hacer estas llamadas asíncronas ya que no dependemos de IAsyncResult y otras interfaces esotéricas, sino que es tan fácil como declarar un evento para responder a las llamadas. Veamos un... [Más]

Este soy yo y este es mi blog técnico, dedicado al software y a la programación.

¡Sígueme en Twitter!

Mis otros blogs

- JM Alarcón @ campusMVP.es
Contenido técnico en español orientado a desarrolladores
- JMAlarcon.es
Blog personal no técnico: sociedad, innovación, empresa...

Krasis

- campusMVP.es:
Los mejores cursos online de programación en español

- SELF LMS:
La plataforma de elearning más potente del mercado.

Histórico