Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Objeto XmlHttpRequest

Estas en el tema de Objeto XmlHttpRequest en el foro de Frameworks JS en Foros del Web. Este post es informativo, ya que hace un par de dias me paso una cosa curiosa. Estuve mirando algun ejemplo para realizar una descarga de ...
  #1 (permalink)  
Antiguo 26/01/2006, 03:19
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 19 años, 4 meses
Puntos: 2
Objeto XmlHttpRequest

Este post es informativo, ya que hace un par de dias me paso una cosa curiosa.

Estuve mirando algun ejemplo para realizar una descarga de contenidos via AJAX. Esta tenia que descargar unos contenidos a un web principal (lo pasava por POST). Inicialmente se descargava los contenidos del menu home a partir de la funcion implementada y, cuando clicko un menu diferente, llamo a la misma funcion pero para descargar otro tipo de contenido (el correspondiente al menú clickado). Tuve problemas-> cuando se ejecutava por primera vez la funcion AJAX, esta tiraba correctamente pero parava la ejecucion del resto de código javascript que tengo, que es mucho. Despues de probar y probar encontre la solucion, quite la llamada .send(null) que, segun he leido por este foro, es obligatorio de poner, si no , el servidor no te devuelve la llamada creada. Pues bien, quite esta linea de código y cual fue mi sorpresa que, se descargava todo el contenido que pedia y mi código js me seguia ejecutando hasta el final. Aqui teneis el código:

Código:
function objetus() { 
   var objetus; 

        try { 
                objetus = new ActiveXObject("Msxml2.XMLHTTP"); 
        } catch (e) { 
                try { 
                        objetus= new ActiveXObject("Microsoft.XMLHTTP"); 
                } catch (E) { 
                        objetus= false; 
                } 
        } 
        if (!objetus && typeof XMLHttpRequest!='undefined') { 
                objetus = new XMLHttpRequest(); 
        } 
        return objetus; 
}  

function menu_ajax(adresa, menuId, menu)
{   
	document.getElementById("loading").style.visibility='visible';
	document.getElementById("loading").innerHTML = menu+"<br>Carregant...";
	_objetus=objetus(); //crear objeto
	url=adresa+"?al=1"; //URL
	_objetus.open("POST",url,true); //abrir procesador
    _objetus.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); //cabeceras POST
	_objetus.setRequestHeader('Content-Type','text/html; charset=iso-8859-1');
    _objetus.send('&al=1' ); //enviar variables
    _objetus.onreadystatechange=function() { //funcion controlador
		if(_objetus.readyState==4)
		{
			if(_objetus.status==200)
			{
				document.getElementById(menuId).innerHTML = _objetus.responseText;
				document.getElementById("loading").style.visibility='hidden';
				document.getElementById("loading").innerHTML = "";
			}
		}
	} 
//_objetus.send(null);
}
Ante esto, alguien puede explicarme pq se decia que es obligatorio este método cuando, por experiencia mia se ha demostrado que no???
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #2 (permalink)  
Antiguo 26/01/2006, 06:55
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
send(null) se usa cuando estás pasando los valores a través de GET (por la url). Si estás usando POST y ponés send(null)... no estás mandando nada.

Código:
_objetus.send('&al=1' ); //enviar variables
.......
//_objetus.send(null);
Además, no sé tenías esto así originalmente antes de comentar la última línea (es decir, 2 llamadas a send), pero acá la segunda llamada sobreimprimiría/borraría la primera, con lo cual no estaría mandando nada.

Otra observación:

Código:
url=adresa+"?al=1"; //URL
Acá ya estás pasando los valores por la url, por lo cual podrías prescindir de esta línea

Código:
_objetus.send('&al=1' );
Creo que para lo que estás haciendo, te conviene usar GET directamente, con un sólo send en null. Aunque también te convendría escuchar otras opiniones, ya que no soy experto en AJAX ni mucho menos.

Saludos
Califa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:07.