martes, marzo 07, 2006

Traducción de artículo de Ajax VII

Estático versus dinámico
Fijate en los Listing 1, 3 y 4 y observá que todo el código está anidado directamente entre etiquetas script. Cuando JavaScript es codificado así y no puesto dentro un método o en el cuerpo de una función, se llama JavaScript estático. Esto significa que el código se ejecuta a veces antes que la página se muestre al usuario (no es 100% claro desde la especificación precisamente de cuando este código se ejecuta y los navegadores hacen diferentes las cosas; igual te garantiza que el código se ejecuta antes que los usuarios puedan interactuar con tu página). Es como generalmente la mayoría de los programadores de Ajax crean el objeto XMLHttpRequest.
Dicho esto, indudablemente podés poner este código en un método como se muestra en el listing 5
Listing 5. Mover el código de creación XMLHttpRequest dentro de un método

<script language="javascript" type="text/javascript">
var request;
function createRequest () {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft){
try {
request=new ActiveXObject("Msxml2.XMLHTTP");
} catch(othermicrosoft) {
try {
request= new ActivexObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error al inicializar XMLHttpRequest!");
}
</script>

Con el código dispuesto como este, vas a necesitar llamar el método antes de que hagas algun trabajo Ajax. Entonces deberías tener algo como el listing 6
Listing 6. Usar un método de creación de XMLHttpRequest

<script language="javascript" type="text/javascript">
var request;
function createRequest () {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft){
try {
request=new ActiveXObject("Msxml2.XMLHTTP");
} catch(othermicrosoft) {
try {
request= new ActivexObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error al inicializar XMLHttpRequest!");
}
function getCustomerInfo();
</script>


El único tema con este código - y la razón por la cual la mayorías de los programadores de Ajax no usan esta forma- es que retarda la notificación de error. Supongamos que tenés un formulario complejo con 10 o 15 campos, cajas de selección y similares, y disparas algo de código Ajax cuando el usuario ingresa texto en el campo 14 (al final del formulario). A ese punto, getCustomerInfo() se ejecuta, trata de crear un objeto XMLHttpRequest y (para este ejemplo) falla. Entonces se escupe un alerta al usuario, diciéndole (en varias palabras) que no puede usar esta aplicación Pero el usuario ya gastó su tiempo ingresando información en el formulario! Eso es bastante molesto y molestia no es algo que típicamente atraiga a los usuarios a volver a tu sitio.
En el caso donde usas JavaScript estático, el usuario va a ver un error apenas entre a la página. ¿eso es molesto tambien? Probablemente; puede hacer que los usuarios se enojen por que tu aplicacion no funciones en sus navegadores. Sin embargo, indudablemente es mejor que tirarle el mismo error despues de que se gastó 10 minutos ingresando información. Por esa sola razón, te propongo establecer tu códgo estaticamente e informarles a los usuarios de forma tamprana sobre posibles problemas.

Etiquetas: