Foros del Web » Programando para Internet » Javascript »

Tengo algo de codigo en un FOR y no me funciona como esperaba

Estas en el tema de Tengo algo de codigo en un FOR y no me funciona como esperaba en el foro de Javascript en Foros del Web. Que tal buenas tardes a todos: Mi problema es el siguiente, tengo estos archivos con los que estoy trabajando: alumbrado.php (Aqui tengo un formulario) cm.js ...
  #1 (permalink)  
Antiguo 24/09/2012, 19:32
 
Fecha de Ingreso: septiembre-2012
Ubicación: Tijuana
Mensajes: 2
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Tengo algo de codigo en un FOR y no me funciona como esperaba

Que tal buenas tardes a todos:

Mi problema es el siguiente, tengo estos archivos con los que estoy trabajando:

alumbrado.php (Aqui tengo un formulario)

cm.js (Aqui estan funciones en javascript)

axreq.php (Este archivo se encarga de insertar en mysql)


Tengo un formulario el cual se encarga de capturar una jornada laboral, donde lo mas importante es el material que se consumen en cada actividad.

Dentro de mi formulario tengo 15 espacios que son elementos <SELECT> donde muestra los diferentes materiales y una caja de texto por cada elemento para capturar la cantidad gastada. Y es algo como esto:
Código:
<label for="material1"><b>Material</b></label><select name="material1" id="material1">
                    <?php
                    while ($vmat = mysql_fetch_array($qm1)) {
                        echo "<option value='$vmat[codigo]'>" . $vmat['nombre'] . "</option>";
                    }
                    mysql_free_result($qm1);
                    ?></select>
                <label for="cantidad1"><b>Cantidad</b></label><input name="cantidad1" type="text" id="cantidad1" size="4" value="0"><br>
Ningun problema hasta aqui!

Una vez que tengo el formulario lleno, le damos agregar por medio de un boton, donde este va a una funcion en el archivo CM.JS y captura los valores de todo el formulario para despues enviarlo al archivo AXREQ.PHP donde este se encarga de insertar los datos a mysql.

El problema resulta cuando en mi formulario decido llenar los 15 elementos con diferentes materiales y los mando uno por uno al archivo AXREQ.PHP para que asi los vaya insertando. Que seria algo como esto:
Código:
for(var x=1; x<=y ;x++)
        {
            if(x==1){
                //alert('La captura ha sido un exito!');
                mat = document.miformulario.material1.value;
                cant = document.miformulario.cantidad1.value;
            }
            if(x==2){
                //alert('Se ha capturado un segundo material');
                mat = document.miformulario.material2.value;
                cant = document.miformulario.cantidad2.value;
            }
            if(x==3){
                //alert('Se ha capturado un tercer material');
                mat = document.miformulario.material3.value;
                cant = document.miformulario.cantidad3.value;
            }
            if(x==4){
                //alert('Se ha capturado un cuarto material');
                mat = document.miformulario.material4.value;
                cant = document.miformulario.cantidad4.value;
            }
            if(x==5){
                //alert('Se ha capturado un quinto material');
                mat = document.miformulario.material5.value;
                cant = document.miformulario.cantidad5.value;
            }
            if(x==6){
                //alert('Se ha capturado un sexto material');
                mat = document.miformulario.material6.value;
                cant = document.miformulario.cantidad6.value;
            }
            if(x==7){
                //alert('Se ha capturado un septimo material');
                mat = document.miformulario.material7.value;
                cant = document.miformulario.cantidad7.value;
            }
            if(x==8){
                //alert('Se ha capturado un octavo material');
                mat = document.miformulario.material8.value;
                cant = document.miformulario.cantidad8.value;
            }
            if(x==9){
                //alert('Se ha capturado un noveno material');
                mat = document.miformulario.material9.value;
                cant = document.miformulario.cantidad9.value;
            }
            if(x==10){
                //alert('Se ha capturado un decimo material');
                mat = document.miformulario.material10.value;
                cant = document.miformulario.cantidad10.value;
            }
            if(x==11){
                //alert('Se ha capturado un decimo primero material');
                mat = document.miformulario.material11.value;
                cant = document.miformulario.cantidad11.value;
            }
            if(x==12){
                //alert('Se ha capturado un decimo segundo material');
                mat = document.miformulario.material12.value;
                cant = document.miformulario.cantidad12.value;
            }
            if(x==13){
                //alert('Se ha capturado un decimo tercero material');
                mat = document.miformulario.material13.value;
                cant = document.miformulario.cantidad13.value;
            }
            if(x==14){
                //alert('Se ha capturado un decimo cuarto material');
                mat = document.miformulario.material14.value;
                cant = document.miformulario.cantidad14.value;
            }
            if(x==15){
                //alert('Se ha capturado un decimo quinto material');
                mat = document.miformulario.material15.value;
                cant = document.miformulario.cantidad15.value;
            }
            objxml.open("POST","axreq.php",true);
            objxml.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            objxml.send("fecha="+fec+"&folio="+fol+"&encargado="+enc+"&economico="+eco+"&supervisor="+sup+"&reporte="+rep+"&tiposervicio="+tpo+"&delegacion="+del+"&vialidad="+via+"&colonia="+col+"&abreviar="+abr+"&calle="+call+"&numero="+num+"&material="+mat+"&cantidad="+cant+"&servicio="+ser+"&observaciones="+obs);
        }
No se cual sea el problema, porque si decido capturar los 15 de una sola vez me captura solo el ultimo de los elementos... No encuentro que pueda ser. Ojo estoy utilizando algo de ajax para mandar los datos al archivo AXREQ.PHP y que los vaya insertando en cada iteracion del ciclo FOR.

Les agradezco mucho si alguno me da una pista, tal vez sea algo que desconosca que este pasando.

PD: Si descomentara los ALERT que tengo, todo va muy bien pero seria molesta que por cada iteracion me mostrara que se ha capturado un material, esa no es la idea
  #2 (permalink)  
Antiguo 24/09/2012, 20:01
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, 6 meses
Puntos: 1485
Respuesta: Tengo algo de codigo en un FOR y no me funciona como esperaba

buenas,
el problema debe ser por dos factores: primero que estas usando el mismo objeto Request, y segundo porque la iteración ocurre tan rápido que no le da tiempo a las peticiones anteriores completar su proceso. por eso con el alert te funciona, porque el alert detiene la ejecucción de javascript. en todo caso, la implementación está muy mal; mas que nada por eficiencia y consumo de recursos. lo correcto sería enviar todos los datos en una sola petición. básicamente tienes que ir recopilando todos los datos e ir formando un string tal que nombre1=valor&nombre2=valor&.... esto lo puedes hacer comodamente en un bucle.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 25/09/2012, 14:56
 
Fecha de Ingreso: septiembre-2012
Ubicación: Tijuana
Mensajes: 2
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Tengo algo de codigo en un FOR y no me funciona como esperaba

Te agradezco mucho tu tiempo, de verdad que ahora ya funciona bien...

La solución fue tal como bien dijiste:
Dentro del ciclo FOR en javascript fui creando un string, separado únicamente por espacios y cuando termina lo mando con ajax al archivo de insertar en php.

Ya estando en php separo el string con explode(" ", cadenastring);
y dentro de un ciclo por medio de sus indices envio tantas veces como sea necesario a capturar
y listo...Super bien!

Etiquetas: ajax, esperaba, formulario, funcion, input, js, php, select, botones
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 13:08.