Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/07/2010, 05:38
Avatar de sumolari
sumolari
 
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 18 años, 7 meses
Puntos: 18
[JQUERY] No sabe el valor de la variable si no la utilizo en un alert

Hola a todos.

Veréis, estoy haciendo un pequeño script para cargar con AJAX la imagen que corresponde a un elemento de un sortable. Ya está todo listo y funciona correctamente todo menos la parte que muestra la imagen.

Código Javascript:
Ver original
  1. jQuery(function($){
  2.        
  3.         var temp_order = '';
  4.         var temp_pre_response = new Array();
  5.        
  6.         $("#items_in_carousel .item").each(function (index) {
  7.             $("input#order", this).val(index);
  8.             temp_order = 'action=getItemThumbnail&item_id=' + $("#category_id", this).val() + '&item_type=' + $("input#type", this).val();
  9.             $.post($("#current_url_get_js").attr("href"), temp_order, function(theTempResponse){
  10.                 temp_pre_response = theTempResponse.split('<p style="display:none;"></p>');
  11.             });
  12.             alert(temp_pre_response[1]); /* OJO A ESTE ALERT, MÁS ADELANTE EXPLICO POR QUÉ LO PONGO */
  13.             $(".item_thumbnail", this).css("background-image", "url(" + temp_pre_response[1] + ")");
  14.         });
  15.        
  16.     });

El funcionamiento es el siguiente: Se recorren todos los elementos del sortable y se carga vía AJAX una página que devuelve siempre la cadena "<p style="display:none;"></p>" seguida de la URL de la imagen. Tras cargar la página, divido la cadena en dos a partir de "<p style="display:none;"></p>", de modo que la primera parte no tiene nada y la segunda debería de tener la URL de la imagen.

La página siempre devuelve algo después de la cadena. Si no encuentra una imagen para el elemento, devuelve la URL a la imagen que tenía el div antes (una imgen con un pequeño degradado, pero eso da igual).

El problema es que cada vez que pruebo tengo el mismo error: la primera iteración del bucle siempre devuelve "undefined" como URL de imagen, y no entiendo por qué, porque siempre debería haber algo. Además sólo pasa con la primera iteración, las siguientes funcionan correctamente.

Además hay otro problema y es que si no pongo el alert que hay en la función (tiene un comentario al lado, así que lo distinguiréis fácilmente), la imagen no se carga. De hecho lo que hace es eliminar la imagen de fondo y dejar tan sólo el color de fondo que hay en el CSS (en el CSS se define como imagen de fondo la imagen que he comentado antes del degradado, así que si no se hubiera encontrado ninguna imagen, debería cargarse la imagen de fondo con el degradado, no eliminarse el fondo).

Tengo la impresión de que lo que hace es reemplazar la URL de la imagen de fondo por "undefined", de ahí que no haya imagen de fondo, sin embargo no sé dónde está el fallo.

Tampoco sé demasiado de Javascript. He intentado detectar si la variable tenía de valor undefined para evitar usar la variable en ese caso, pero no he conseguido hacerlo. Además, aunque deje el alert, la primera iteración no funciona en ninguna ocasión, así que tampoco soluciona el problema.

¿Se os ocurre alguna cosa?

Gracias por todo.

Edito: Estoy trasteando un poco más y y cambio el alert por alert('A') (por ejemplo), se muestran las imágenes correctamente, sin embargo, si elimino el alert, no se muestra ninguna. Además es curioso que a pesar de que en la primera iteración devuelve undefined, la imagen se carga correctamente (la imagen se carga en la siguiente línea, y podéis comprobar que se trata de la misma variable).

Edito 2: Todo lo que he comentado antes me sucede en Firefox, al probar en Chrome todos los elementos devuelven undefined (en Firefox a partir del segundo elemento los valores eran correctos, y las imágenes se mostraban bien) y las imágenes nunca se muestran.

Última edición por sumolari; 31/07/2010 a las 05:56 Razón: Más información