Foros del Web » Programando para Internet » Javascript »

Error en Bucle FOR

Estas en el tema de Error en Bucle FOR en el foro de Javascript en Foros del Web. Hola chicos, si bien el codigo tiene Jquery, el error me parece que es de javascript. Tengo un simple bucle, dentro de este bucle tengo ...
  #1 (permalink)  
Antiguo 27/03/2012, 10:10
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Pregunta Error en Bucle FOR

Hola chicos, si bien el codigo tiene Jquery, el error me parece que es de javascript.
Tengo un simple bucle, dentro de este bucle tengo un par de condiciones, les copio el codigo y les sigo contando el problema:

Código Javascript:
Ver original
  1. function checkTa(enviarCO){
  2. var sumError ='';
  3. var n = 1;
  4.     for(n; n<=8; n++){
  5.     var asdf = "talonario_" + n;
  6.     if( $("#" + asdf).val() != ''){
  7.         $.post(
  8.         'ajax/talonario.php',
  9.         {talonario:$("#" + asdf).val()},
  10.         function(data){
  11.             if(data.error!='ok'){
  12.             if(data.proveedor==0 || data.proveedor==proveedor){
  13.                 if(!enviarCO){
  14.                 document.rango.submit();
  15.                 }
  16.             }else{
  17.               sumError ="El talonario de la fila: "+ n +" fue asignado al proveedor:"+data.proveedor+".\r\n";
  18.                nextfield = asdf;
  19.                 $('#error').text(sumError);
  20.                 $('#error').show('slow');
  21.                 setTimeout(function(){
  22.                 $(".error").hide('slow');
  23.                 },5000);
  24.                 $("#" + asdf).select();
  25.         //        alert(n);
  26.             }
  27.             }else{
  28.             sumError ="El talonario de la fila "+ n +" debe ser cargado previamente.\r\n";
  29.              nextfield = asdf;
  30.             $('#error').text(sumError);
  31.             $('#error').show('slow');
  32.             setTimeout(function(){
  33.                 $(".error").hide('slow');
  34.             },5000);
  35.             $("#" + asdf).select();
  36.             }
  37.         },
  38.         'json'
  39.         )
  40.     }
  41.     }  
  42. }

En la primera condicion si el campo "talonario_"+n esta basio es ignorado. Caso contrario por JSON y AJAX pido unos datos.

Con los datos recibidos en function(data)
realizo una segunda condicion: si data.error != "ok" realizo la tercer condicion para enviar el form o caso contrario emito un error en el cual indico la FILA ( variable n ).

Si nos detenmos AK, y suponemos que n=1 las condiciones son:

para la primera y segunda true y la tercera false

Me aparece el error:
Cita:
"El talonario de la fila: 9 fue asignado al proveedor: 474.\r\n"
cuando tendria que decir:
Cita:
"El talonario de la fila: 1 fue asignado al proveedor: 474.\r\n"
Tambien setea la variable nextfield="talonario_8"
cuando tendia que setear nextfield="talonario_1"


ya que talonario_[2-8] estan basio y no pasan la primer condicion.

Ademas no se de donde saca el 9 si el for condiciona n<=8.


Viendo la vista previa, es posible que el bucle continue sin esperar la respuesta JSON?
__________________
Mono programando!
twitter.com/eguimariano
  #2 (permalink)  
Antiguo 27/03/2012, 16:54
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: Error en Bucle FOR

Cita:
Viendo la vista previa, es posible que el bucle continue sin esperar la respuesta JSON?
¡buenas! si, puede ser parte del problema. por defecto las peticiones xhr son asíncronas. lo que significa que javascript no espera a que el servidor responda, sino que continua con el resto. puedes hacer que las peticiones sean síncronos pero quizas produzca efectos indeseados. eso lo tienes que evaluar por ti mismo. si quieres que las peticiones sean asíncronas (como inicialmente lo tienes), entonces deberías decidir si replantear el esquema. por ejemplo, en lugar de hacer varias peticiones (una por campo), agrupar toda la información y realizar una sola petición. por supuesto, probablemente eso requerirá la modificación del código servidor para manejar múltiples datos y generar las respuestas acorde. si no quieres hacer eso, entonces debes adaptar el código para que retenga el valor de la variable iteradora en cada callback que le asignas en ajax (el handler que maneja el evento en ajax). básicamente consiste en crear un closure, aunque creo que también lo puedes hacer con bind. aca un artículo que explica precisamente este problema y como lo soluciona con closure. http://robertnyman.com/2008/10/09/ex...-and-closures/
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: ajax, bucle, jquery, js, 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 00:06.