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

Ajax dentro de ciclo for (javascript)

Estas en el tema de Ajax dentro de ciclo for (javascript) en el foro de Frameworks JS en Foros del Web. Tengo un gran problema pués no logro realizar una petición Ajax dentro de un ciclo for. Lo que quiero lograr es llamar a una lib.php ...
  #1 (permalink)  
Antiguo 08/05/2009, 15:01
Avatar de Yamilskate  
Fecha de Ingreso: septiembre-2006
Mensajes: 94
Antigüedad: 17 años, 7 meses
Puntos: 0
Ajax dentro de ciclo for (javascript)

Tengo un gran problema pués no logro realizar una petición Ajax dentro de un ciclo for.

Lo que quiero lograr es llamar a una lib.php la cuál me traera una respuesta de un Webservice, pero el punto es que mi Ajax sólo me devuelve la última respuesta saltandose las demás del for.

Código PHP:
        for (var i=0;i<enviados.length-1;i++){

             var 
cve_avaluo frm_table_xml.elements[enviados[i]].id;

             
ajax=nuevoAjax();
             
ajax.open("POST""lib/lib_wsinfo.php",true);
             
ajax.onreadystatechange=function() {
               if (
ajax.readyState==4) {
                  
alert('ESTE ALERT SÓLO LO MANDA UNA VEZ CON EL ÚLTIMO ID, osea i=6, donde 6 es el último de mi ciclo for'); //AQUÍ ES DONDE SE CENTRALIZA MI CONFLICTO
                  
if (ajax.responseText=="Dato folio no valido.")
                   
alert('Error en avalúo '+cve_avaluo);

               }
             }
             
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
             
ajax.send("cve_avaluo="+cve_avaluo);
             
         } 
Editado: SOLUCIONADO DE OTRA MANERA!
Lo resolvi de otra forma, haciendo ´pop up normal hacia mi librería evitandome problemas.

Gracias de cualquier forma! Salu2!

(PD: Si lo creen conveniente pueden eliminar éste post)

Última edición por Yamilskate; 08/05/2009 a las 16:21
  #2 (permalink)  
Antiguo 01/09/2009, 10:11
 
Fecha de Ingreso: junio-2006
Mensajes: 7
Antigüedad: 17 años, 10 meses
Puntos: 0
Información Respuesta: Ajax dentro de ciclo for (javascript)

tu problema es algo sencillo, y creo que viendo tu codigo ya se que es lo que estaba pasando, creo que ya hace tiempo que lo resolviste, pero aqui esta lo que estabas haciendo mal segun yo

for (var i=0;i<enviados.length-1;i++){

var cve_avaluo = frm_table_xml.elements[enviados[i]].id;

ajax=nuevoAjax();/*sobreescribes el ajax anterior*/
ajax.open("POST", "lib/lib_wsinfo.php",true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
alert('ESTE ALERT SÓLO LO MANDA UNA VEZ CON EL ÚLTIMO ID, osea i=6, donde 6 es el último de mi ciclo for'); //AQUÍ ES DONDE SE CENTRALIZA MI CONFLICTO
if (ajax.responseText=="Dato folio no valido.")
alert('Error en avalúo '+cve_avaluo);

}
}
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send("cve_avaluo="+cve_avaluo);

}

en cada interacion estas declarado "ajax=nuevoAjax();", esto es un tema algo vasico pero que muchos programadores dejan pasar por que "las cosas funcionan aunque no lo haga", que es el ambito de variables, lo unico que tenias que hacer es anteceder la palabra "var" ( var ajax=nuevoAjax(); ) y listo, que es lo que esta pasando que cuando declaras una variable sin anteceder "var" se crea una variable global disponible desde cualquier script de la pagina, y como en ajax queda digamos "pediente" de ejecutar la respuesta, se sobreescribe el objeto y deja de existir por que se reescribe la referencia al objeto, para evitar sobreescribir objetos o variables, solo antecede de var simpre que declares una variable como dije antes es una practica que pocos programadores siguen pero es una practica completamente aconsejable, que siempre pongas var antes de la variable a menos que en tu conciencia este que quieres declarar una variable global entoces si y solo entoces no pongas var..

investiga mas acerca de ambitos de variables en JavaScript
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 22:41.