Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Ajax anidado en ciclo for

Estas en el tema de Ajax anidado en ciclo for en el foro de Javascript en Foros del Web. Al utilizar el siguiente código en el que tenemos una función ajax dentro de un ciclo for siempre se ejecuta la función ajax con la ...
  #1 (permalink)  
Antiguo 13/01/2012, 12:28
Avatar de Yamilskate  
Fecha de Ingreso: septiembre-2006
Mensajes: 94
Antigüedad: 18 años, 2 meses
Puntos: 0
Ajax anidado en ciclo for

Al utilizar el siguiente código en el que tenemos una función ajax dentro de un ciclo for siempre se ejecuta la función ajax con la ultima variable del ciclo for (En este ejemplo con "cocina") Alguna idea?
Código:
var images = new Array("fachada","entorno","sala","recamara","bano","cocina");
	for(x in images){
		$.ajax({
			url:"fotografias/"+$('#cve_avaluo').val()+"/"+images[x]+".jpg",
			type:'HEAD',
			success:
				function(){
					$('.tdImagen').eq(x).html("<img src='fotografias/"+$('#cve_avaluo').val()+"/"+images[x]+".jpg' width='100%' height='100%'>");
				}
			});
		}
  #2 (permalink)  
Antiguo 13/01/2012, 13:27
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Ajax anidado en ciclo for

use images[x], el comportamiento de for en javascript es completamente diferente al de otros lenguajes.

además ¿es realmente necesario enviar tantas peticiones, no lo puede compactar en 1?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 13/01/2012, 15:11
Avatar de Dnielf  
Fecha de Ingreso: diciembre-2008
Ubicación: 127.0.0.1
Mensajes: 72
Antigüedad: 16 años
Puntos: 14
Respuesta: Ajax anidado en ciclo for

Eso es un problema de ámbito de variables, en JavaScript solo las funciones crean ámbitos, además la petición por ajax termina mucho más lento que el ciclo for, con lo que x en el callback será el último del ciclo.

Solución :
Código Javascript:
Ver original
  1. var images = new Array("fachada","entorno","sala","recamara","bano","cocina");
  2.     for(x in images){
  3.         (function(y){
  4.                  $.ajax({
  5.             url:"fotografias/"+$('#cve_avaluo').val()+"/"+images[y]+".jpg",
  6.             type:'HEAD',
  7.             success:
  8.                 function(){
  9.                     $('.tdImagen').eq(y).html("<img src='fotografias/"+$('#cve_avaluo').val()+"/"+images[y]+".jpg' width='100%' height='100%'>");
  10.                 }
  11.             });
  12.         }(x));
  13.            }
__________________
"Si aprender quieres, librerías usar no debes"

Etiquetas: ajax, html, anidados, ciclos
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 06:12.