RSS

Instanciar un objeto XMLHttpRequest

Fri, Feb 2, 2007

Artí­culos, Programación

Últimamente he visto preguntas en muchos foros de ¿Cuál es la mejor forma de Instanciar un objeto XMLHttpRequest?

El concepto de XMLHttpRequest fue desarrollado originalmente por Microsoft. La implementación de Microsoft se denomina XMLHTTP y, como objeto ActiveX, difiere ligeramente de la norma estándar publicada. Ha estado disponible desde Internet Explorer 5.0. y es accesible por medio de JScript, VBScript y otros lenguajes de scripting soportados por este navegador.

El objeto XMLHttpRequest se encuentra en el corazon de cada aplicación Ajax, la idea es crear una instancia del objeto XMLHttpRequest independiente del navegador que pueda estar usando el usuario; para entender bien esto es necesario que tengamos bien claro los conceptos de objeto en JavaScript .
Esta es la forma mas elegante de instanciar un objeto XMLHttpRequest.

function getXMLHTTPRequest()
{
var req = false;
try
{
req = new XMLHttpRequest(); /* p.e. Firefox */
}
catch(err1)
{
try
{
req = new ActiveXObject(”Msxml2.XMLHTTP”);
/* algunas versiones IE */
}
catch(err2)
{
try
{
req = new ActiveXObject(”Microsoft.XMLHTTP”);
/* algunas versiones IE */
}
catch(err3)
{
req = false;
}
}
}
return req;
}

var miPeticion = getXMLHTTPRequest();

function llamarAjax() {
// declara una variable que contiene alguna información
// para pasar al servidor
var apellido = ‘Mauricio’;
// construye la URL del script del servidor que queremos llamar
var url = “miscriptdeservidor.php?surname=” + apellido;
// generar un número aleatorio
var miAleatorio=parseInt(Math.random()*99999999);
// pedimos a nuestro objeto XMLHTTPRequest que abra una
// conexión con el servidor
miPeticion.open(”GET”, url + “&rand=” + miAleatorio, true);
// preparamos una función respuestaAjax() para ejecutarse cuando
// la respuesta haya llegado
miPeticion.onreadystatechange = respuestaAjax;
// y finalmente enviamos la petición
miPeticion.send(null);
}

function respuestaAjax() {
// sólo estamos interesados en un readyState de 4,
// es decir “completado”
if(miPeticion.readyState == 4) {
// si la respuesta HTTP del servidor es “OK”
if(miPeticion.status == 200) {
… declaraciones a ejecutar por el programa …
} else {
// crear un mensaje de error para cualquier
// otra respuesta HTTP del servidor
alert(”Ha ocurrido un error: ” + miPeticion.statusText);
}
}
}

Existen muchas otras formas de instanciar un objeto XMLHttpRequest, por ejemplo seria usando la estructura de decisión if – else.

function getXMLHTTPRequest()
{
var req = false;
if (window. XMLHttpRequest();
{
req = new XMLHttpRequest();
} else {
if (window.ActiveXObject)
{
Pero para el caso de la versión del navegador Explorer tendríamos que usar try – catch entonces no tiene sentido. otro forma seria usando el objeto navigatior con la propiedad appName, pero es mas recomendable la primera opción.

This post was written by:

- who has written 94 posts on Ruben Mauricio.


Contact the author

Leave a Reply