Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] peticion ajax dentro de un ciclo for

Estas en el tema de peticion ajax dentro de un ciclo for en el foro de Javascript en Foros del Web. Hola amigos Esta noche necesito ayuda con una funcion en ajax el problema es al recorrer una tabla, que contiene filas, y cada fila tiene ...
  #1 (permalink)  
Antiguo 22/10/2013, 19:40
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 11 años, 4 meses
Puntos: 2
peticion ajax dentro de un ciclo for

Hola amigos
Esta noche necesito ayuda con una funcion en ajax el problema es al recorrer una tabla, que contiene filas, y cada fila tiene un id diferente (idSeleccionado) que puede ser
1,3,13,14,80...

resulta que cada que recorro con el id debo hacer una peticion al servidor para que me valide si ese item ya lo he agregado a mi base de datos, pero ocurreo que cuando recorro el for, este solo ejecuta la peticion en el ultimo diclo del for
Por ejemplo si tengo 3 filas y ejecuto...cuando i=0, este no hace ejecuta la perticion porque readystate=1, cuando i vale 1 tampoco ejecuta, pero cuando i vale 2 si entra y hace lo que hay dentro de peticion.onreadystatechange = function() y ahi si ejecuta la peticion, no se si es que estoy haciendo algo mal en el orden que tengo en el codigo, pero de verdad necesito su ayuda!! (sin usar jquery) muchas gracias de antemano y les dejo el codigo de la funcion en ajax:




Código Javascript:
Ver original
  1. function agregar()
  2. {      
  3.  
  4. var cantidad = document.getElementsByName('nombrefila').length;
  5. for (var i=0;i < cantidad;i++)
  6.         {  
  7.         var seleccionado= document.getElementsByName('nombrefila')[i];
  8.  
  9.         idSeleccionado=seleccionado.id;
  10.            
  11.                         var idparty= document.getElementById('party').value;
  12.                    
  13.                        
  14.                             //verifica
  15.                     peticion = Ajax();
  16.                     peticion.open("POST", "validar.php", true);
  17.                     peticion.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
  18.                     peticion.onreadystatechange = function()
  19.                     {          
  20.                     if (peticion.readyState==4)    
  21.                         {
  22.                             if (peticion.responseText=='true')     
  23.                                 {  
  24.                                     alert ('ya esta agregado');
  25.                                 }//if
  26.                                 else                               
  27.                                 if (peticion.responseText=='false')    
  28.                                 {
  29.                                 agregarAlParty(idSeleccionado,idparty);
  30.                                 }                                              
  31.                         }//if                  
  32.                     }//function
  33.                     queryCodigo = "idSeleccionado="+idSeleccionado+"&idparty="+idparty";
  34.                     peticion.send(queryCodigo);
  35.                     //termina de verificar                 
  36.                
  37.            
  38.         }                  
  39. }



Gracias de nuevo!!

Última edición por summerblack; 22/10/2013 a las 19:47
  #2 (permalink)  
Antiguo 23/10/2013, 05:59
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: peticion ajax dentro de un ciclo for

en esta línea tienes un error
Cita:
queryCodigo = "idSeleccionado="+idSeleccionado+"&idparty="+idpar ty";
en lugar de usar un ciclo, usa el nombre de los controles como array
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 23/10/2013, 06:23
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: peticion ajax dentro de un ciclo for

buenas,
lo que sucede es que ajax es asíncrono. es decir, se ejecuta cuando esta disponible sin interrumpir ni bloquear el resto del código. al tener esta característica, el bucle continua el ciclo y en cada iteración sobrescribe la petición cancelando así la anterior. ¿qué puedes hacer? tienes dos alternativas: una cola de peticiones o la posibilidad de enviar múltiples records. la ventaja de la primera opción es que cada record es individual pero requiere enviar múltiples peticiones, una a una en orden según vaya finalizando uno comienza la otra. la otra opción, es que envies tanta información como records tengas. la ventaja es que manejas una sola petición y es mucho más rápido comparado a tener varias peticiones.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 23/10/2013, 07:55
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: peticion ajax dentro de un ciclo for

Hola amigos, primero que todo muchas gracias por sus ayudas, sin embargo hay cosas que no entendi:

ISABELM

Primero, ya corregi el error que tenia y gracias

Según la funcion que guarda las variables en un array:
Código Javascript:
Ver original
  1. function enviardatosAjax(vals) {
  2. var valores = [];
  3.  
  4. for (var i = 0; i < vals.length-1; i++) {
  5.  
  6. valores.push(vals[i].value);
  7. }

Como se invoca esta funcion dentro de mi metodo agregar?
es decir la cree y no se donde ponerla jejej pero muchas gracias por la paciencia espero me puedan explicar.


zerokilled Claro eso explica porque solo ejecuta con el ultimo dato, porque cancela las anteriores, si tienes algun ejemplito de las soluciones que me has dado graciasss
  #5 (permalink)  
Antiguo 23/10/2013, 09:01
 
Fecha de Ingreso: octubre-2013
Mensajes: 8
Antigüedad: 10 años, 6 meses
Puntos: 3
Respuesta: peticion ajax dentro de un ciclo for

Cita:
Iniciado por zerokilled Ver Mensaje
buenas,
lo que sucede es que ajax es asíncrono. es decir, se ejecuta cuando esta disponible sin interrumpir ni bloquear el resto del código. al tener esta característica, el bucle continua el ciclo y en cada iteración sobrescribe la petición cancelando así la anterior. ¿qué puedes hacer? tienes dos alternativas: una cola de peticiones o la posibilidad de enviar múltiples records. la ventaja de la primera opción es que cada record es individual pero requiere enviar múltiples peticiones, una a una en orden según vaya finalizando uno comienza la otra. la otra opción, es que envies tanta información como records tengas. la ventaja es que manejas una sola petición y es mucho más rápido comparado a tener varias peticiones.
Esa respuesta te explica un poco lo que te paso.

Mas que tu funcion yo enviaria una cadena con un separador, lo haces asi mediante un for, lo envias en el ajax todo a la vez por fuera del for (un for con un ajax es una mala idea asi sea sincronno o asincrono al final te dara problemas) y listo, el el otro lado solo seria un split basado en los separadores y validar cada id como lo requieras.
  #6 (permalink)  
Antiguo 23/10/2013, 11:13
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: peticion ajax dentro de un ciclo for

muchisimas gracias
  #7 (permalink)  
Antiguo 23/10/2013, 14:48
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: peticion ajax dentro de un ciclo for

Cita:
Iniciado por crodriguez1214 Ver Mensaje
Esa respuesta te explica un poco lo que te paso.

Mas que tu funcion yo enviaria una cadena con un separador, lo haces asi mediante un for, lo envias en el ajax todo a la vez por fuera del for (un for con un ajax es una mala idea asi sea sincronno o asincrono al final te dara problemas) y listo, el el otro lado solo seria un split basado en los separadores y validar cada id como lo requieras.


Cita:
Iniciado por IsaBelM Ver Mensaje
en lugar de usar un ciclo, usa el nombre de los controles como array
está muy claro. lee con atención el post que he vinculo
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 23/10/2013 a las 14:54
  #8 (permalink)  
Antiguo 24/10/2013, 11:28
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: peticion ajax dentro de un ciclo for

si eso hice mande la cadena separada por comas y me funciono muy bien, muchisimas gracias chicos

Etiquetas: ajax, funcion, jquery, peticion, php
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 03:18.