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

invocar la misma funcion varias veces

Estas en el tema de invocar la misma funcion varias veces en el foro de Frameworks JS en Foros del Web. Hola, tengo una pequeño problema, estaba haciendo una funcion ajax parametrizada donde paso los valores por el metodo GET, ahora esta funcion la quiero utilizar ...
  #1 (permalink)  
Antiguo 14/10/2009, 09:44
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
invocar la misma funcion varias veces

Hola, tengo una pequeño problema, estaba haciendo una funcion ajax parametrizada donde paso los valores por el metodo GET, ahora esta funcion la quiero utilizar varias veces a la vez en el evento onload del body:

Código:
onload="fAjax('s1.php','&campo1=<?php echo $s1; ?>','div1'); fAjax('s2.php','&campo1=<?php echo $s2; ?>','div2');">
y mi funcion es esta:

Código:
ajax = nuevoAjax();

function fAjax(archivo,vars,divid){
	myRand = parseInt(Math.random()*999999999999999);
	var modurl = archivo +"?rand=" + myRand + vars; 
	ajax.open("GET", modurl, true);
	mydiv = divid;
	ajax.onreadystatechange = rAjax;
	ajax.send(null);
}

function rAjax() {
	if (ajax.readyState == 4) {
		if(ajax.status == 200) {
			var miTexto = ajax.responseText;
			document.getElementById(mydiv).innerHTML = (miTexto);
		}
	}else{
		document.getElementById(mydiv).innerHTML = '<img src="images/sending.gif">';
	}	
}
El problema es que siempre ejecuta la ultima funcion y las anteriores se quedan en el estado "cargando", como puedo resolver esto?
__________________
Quitenme la vida pero no la bebida.
  #2 (permalink)  
Antiguo 14/10/2009, 10:20
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: invocar la misma funcion varias veces

El problema es que al usar la función fAjax estás usando el mismo objeto XMLHttpRequest(), por cada petición debes crear un nuevo objeto (también debes tener en cuenta ese detalle al capturar el evento onreadystatechange con la función rAjax)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 14/10/2009, 10:40
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: invocar la misma funcion varias veces

mmm disculpa, y cual sería la diferencia con esta funcion? (la saque de un tutorial):

Código:
function CargaCitas (url,capa,valores,metodo)
{
   var ajax=nuevoAjax();
   var capaContenedora = document.getElementById(capa);
   myRand = parseInt(Math.random()*999999999999999);
   var modurl = url +"?rand=" + myRand; 

/*Creamos y ejecutamos la instancia si el metodo elegido es POST*/
 if(metodo.toUpperCase()=='POST'){
        document.write="hola pepe";
    ajax.open ('POST', modurl, true);
    ajax.onreadystatechange = function() {
         if (ajax.readyState==1) {
                 capaContenedora.innerHTML="Cargando.......";
         }
         else if (ajax.readyState==4){
            if(ajax.status==200)
            {
                 document.getElementById(capa).innerHTML=ajax.responseText; 
            }
            else if(ajax.status==404)
                 {

                     capaContenedora.innerHTML = "La direccion existe";
                 }
             else
                 {
                     capaContenedora.innerHTML = "Error: ".ajax.status;
                 }
        }
    }
    ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    ajax.send(valores);
    return;
}
/*Creamos y ejecutamos la instancia si el metodo elegido es GET*/
if (metodo.toUpperCase()=='GET'){
	
    ajax.open ('GET', modurl, true);
    ajax.onreadystatechange = function() {
         if (ajax.readyState==1) {
                 capaContenedora.innerHTML='<img src="images/sending.gif" width="16" height="16" align="absmiddle">';
         }
         else if (ajax.readyState==4){
			 document.getElementById(capa).innerHTML=ajax.responseText;
        }
    }
    ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    ajax.send(null);
    return
}
}

A esta funcion la puedo llamar varias veces a la vez y no he tenido problemas... porque? casi estoy haciendo lo mismo.... es porque el objeto esta dentro de la funcion?
__________________
Quitenme la vida pero no la bebida.
  #4 (permalink)  
Antiguo 14/10/2009, 10:51
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: invocar la misma funcion varias veces

Porque, como te comenté, cada vez que llamas a la función se crea un nuevo objeto XMLHttpRequest()
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
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 14:12.