Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/09/2009, 10:11
pakos
 
Fecha de Ingreso: junio-2006
Mensajes: 7
Antigüedad: 18 años, 6 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