Foros del Web » Programando para Internet » Jquery »

[JQUERY] No sabe el valor de la variable si no la utilizo en un alert

Estas en el tema de [JQUERY] No sabe el valor de la variable si no la utilizo en un alert en el foro de Jquery en Foros del Web. 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á ...
  #1 (permalink)  
Antiguo 31/07/2010, 05:38
Avatar de 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
  #2 (permalink)  
Antiguo 31/07/2010, 10:00
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: [JQUERY] No sabe el valor de la variable si no la utilizo en un alert

Porque el cambio en el estilo debería estar dentro de la función callback:
Código Javascript:
Ver original
  1. $.post($("#current_url_get_js").attr("href"), temp_order, function(theTempResponse){
  2.     temp_pre_response = theTempResponse.split('<p style="display:none;"></p>');
  3.     $(".item_thumbnail", this).css("background-image", "url(" + temp_pre_response[1] + ")");
  4. });
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 01/08/2010, 02:35
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 18 años, 7 meses
Puntos: 18
Respuesta: [JQUERY] No sabe el valor de la variable si no la utilizo en un alert

¡Gracias! Con esto siempre recibo la URL correcta, sin embargo no consigo aplicar el cambio en el CSS.

Parece que dentro de la función this no apunta al elemento actual del bucle. Supongo que debe de haber algún modo de clonar el valor de this antes de ejecutar la función y cargar el valor de esta variable dentro de la función, pero realmente soy un novato en Javascript, así que no tengo ni idea de cómo hacerlo.

¿Podríais hecharme una manita? ¿Se os ocurre algún método mejor que el que se me ha ocurrido?
  #4 (permalink)  
Antiguo 01/08/2010, 13:12
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: [JQUERY] No sabe el valor de la variable si no la utilizo en un alert

Puedes asignarlo a una variable:
Código Javascript:
Ver original
  1. var variable = this;
Y luego usar esa variable dentro de la función callback.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 01/08/2010, 13:52
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 18 años, 7 meses
Puntos: 18
Respuesta: [JQUERY] No sabe el valor de la variable si no la utilizo en un alert

Había probado antes a hacer algo similar sólo que definiendo la variable fuera del bucle y asignándole el valor dentro del bucle, lo cual no funciona. Sin embargo lo que comentas va perfectamente.

¡¡Muchas gracias!! Seguramente el problema era una estupidez pero estaba totalmente atascado.

Etiquetas: string, alerta
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:19.