Foros del Web » Programando para Internet » Jquery »

Combinar Lightbox (jQuery) con datos en XML

Estas en el tema de Combinar Lightbox (jQuery) con datos en XML en el foro de Jquery en Foros del Web. Partamos desde aca: Cita: miniatura = $(this).find('proyecto').find('miniatura').text(); imagen = $(this).find('proyecto').find('imagen').text(); info = $(this).find('proyecto').find('info').text(); Esto es un tanto aparatoso. Cambiemoslo por : Cita: miniatura = $(this).find('miniatura').text(); ...

  #31 (permalink)  
Antiguo 10/01/2010, 10:34
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Partamos desde aca:

Cita:
miniatura = $(this).find('proyecto').find('miniatura').text();
imagen = $(this).find('proyecto').find('imagen').text();
info = $(this).find('proyecto').find('info').text();
Esto es un tanto aparatoso. Cambiemoslo por :

Cita:
miniatura = $(this).find('miniatura').text();
imagen = $(this).find('imagen').text();
info = $(this).find('info').text();
Y probemos esto:
Cita:
alert( $(this) +" - " + miniatura +" - " + imagen +" - " + info);
Creo que quizas no estamos recuperando bien la informacion.

Ah! Otra cosa es el problema con estas comillas:

Cita:
li = '<li><a href="+imagen+" rel="prettyPhoto[fondos]" title="+info+<br/>+empresa+<br/>+tecnologia+"><img src="+miniatura+" class="imagen_hover" alt="<strong>+proyecto+</strong>"/></a></li>';
Fijate que no estamos realmente usando variables. Necesitamos usar comillas doblas para que esto funcione (para que abran y cierren, alternando strings con variables):

Cita:
li = "<li><a href='"+imagen+"' rel='"prettyPhoto[fondos]"' title='"+info+<br/>+empresa+<br/>+tecnologia+"'><img src='"+miniatura+"' class='"imagen_hover"' alt='"<strong>+proyecto+</strong>"'/></a></li>";
Esto es fundamental. Para los atributos usar un tipo de comillas, y para declaraciones de variables otro tipo de comillas, comprendes?

En suma, quedan comillas para un atributo, seguidas por comillas para declarar variables, encadaenadas con + ... asi: ' " + var + " '
  #32 (permalink)  
Antiguo 10/01/2010, 12:36
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

He probado esto y funciona perfectamente.

Código Javascript:
Ver original
  1. alert( $(this) +" - " + miniatura +" - " + imagen +" - " + info);

Por lo tanto tiene que ser de la variable "li". Esta claro que algo falla en la sintaxis.

Código Javascript:
Ver original
  1. li = "<li><a href='"+imagen+"' rel='"prettyPhoto[fondos]"' title='"+info+<br/>+empresa+<br/>+tecnologia+"'><img src='"+miniatura+"' class='"imagen_hover"' alt='"<strong>+proyecto+</strong>"'/></a></li>";

No he entendido del todo bien lo de ' "+ var + " '. ¿Habria que hacerlo en cada variable? Lo pregunto porque en 'title' hay 3 variables mezcladas con codigo HTML y no se si hay que hacerlo con cada una. Un lio, vamos.

Otra cosa que es que 'rel' no contiene ninguna variable ¿tambien hay que añadir los dos tipos de comillas?

Saludos.

Última edición por Mr_Raymon; 12/03/2010 a las 04:27
  #33 (permalink)  
Antiguo 10/01/2010, 14:20
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Yo ya agregue las comillas. Simplemente hace copy paste.

Pero para que lo entiendas, mira esto:
Cita:
v = "texto";

m = "encadenamos" + v;
Estamos encadenando texto con una variable. Como? Cerrando las comillas y usando el signo +

Esto mismo hacemos con la variable li (si bien usamos html como texto). Pero volvemos a abrir comillas una y otra vez, encadenando con +.

Por su lado, los atributos html necesitan comillas. Entonces hay un conflicto. Esto se soluciona usando comillas simples para encadenar, y comillas dobles para abrir y cerrar el encadenamiento.

Cita:
li = "<li><a href='"+imagen+"' rel='"prettyPhoto[fondos]"' title='"+info+<br/>+empresa+<br/>+tecnologia+"'><img src='"+miniatura+"' class='"imagen_hover"' alt='"<strong>+proyecto+</strong>"'/></a></li>";
Aqui esta hecho, fijate bien. Casi no se percibe pero conviven las comillas simples con las dobles.
  #34 (permalink)  
Antiguo 10/01/2010, 14:43
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

He copiado y he pegado tal como me has dicho. Esto es lo que dice IE:

Cita:
Detalles de error de página web

Agente de usuario: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)
Fecha: Sun, 10 Jan 2010 20:37:00 UTC


Mensaje: Se esperaba ';'
Línea: 42
Carácter: 38
Código: 0
URI: file:///C:/Web/prueba.html
¿Seguro que esta bien?
  #35 (permalink)  
Antiguo 10/01/2010, 15:58
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Hablabamos de hacer copy paste de esto, no?:

Cita:
li = "<li><a href='"+imagen+"' rel='"prettyPhoto[fondos]"' title='"+info+<br/>+empresa+<br/>+tecnologia+"'><img src='"+miniatura+"' class='"imagen_hover"' alt='"<strong>+proyecto+</strong>"'/></a></li>";
Ahi no hay problemas de " ; ".

Los "punto y coma" se usan siempre al final de las lineas. Chequea que no te falte ninguno.

Por cierto, pero tema aparte, creo que al cerrar las llaves de esto sobra un punto y coma:

Cita:
error: function(avisoError) {

// FUNCION PARA AVISAR DEL ERROR

};
Mira. Teniendo el error en el explorer, lo unico que necesitas es abrir el codigo fuente y fijarte que linea es la que tiene el error. Que es la "Línea: 42", segun te dice IE, pero que no coincidiria seguramente con el codigo fuente que abras con Dreamweaber.

Mira el codigo fuente en directamente en explorer, en el menu Ver -> Codigo fuente
  #36 (permalink)  
Antiguo 10/01/2010, 16:58
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

¡¡¡ Lo He Conseguido !!!

Menuda alegria me he llevado. Despues buscar un poco de informacion, sabia que algo mal estaba en el codigo que has escrito.

Tu codigo

Código Javascript:
Ver original
  1. li = "<li><a href='"+imagen+"' rel='"prettyPhoto[fondos]"' title='"+info+<br/>+empresa+<br/>+tecnologia+"'><img src='"+miniatura+"' class='"imagen_hover"' alt='"<strong>+proyecto+</strong>"'/></a></li>";

Si te fijas bien no esta cerradas correctamente las comillas. Lo correcto, segun he buscado en otra web, es abrir y cerrar la variable con comillas simples y dentro de los atributos o parametros abrir y cerrar con comillas dobles (dentro de estas, se añaden las comillas simples). Hay que poner comillas a todas las variables, da igual que esten metidas con codigo HTML o lo que esa. Se te habia olvidado poner en info, empresa, tecnologia y proyecto.

Codigo corregido

Código Javascript:
Ver original
  1. li = '<li><a href="'+imagen+'" rel="prettyPhoto[fondos]" title="'+info+'<br/>'+empresa+'<br/>'+tecnologia+'"><img src="'+miniatura+'" class="imagen_hover" alt="<strong>'+proyecto+'</strong>"/></a></li>';

Le he dado bastantes vueltas a la cabeza pero lo logramos ;)

Aunque tengo que decir que todavia no hemos terminado. Faltaria añadir las otras categorias aparte de "web", faltarian otras tres mas. ¿Habria que hacer otra funcion o tendria que hacer otra llamada tipo $.ajax?

Tengo que decir a todo esto que sin tu ayuda no hubiera sido posible y te lo agradezco. Muchas Gracias mayid.

Última edición por Mr_Raymon; 12/03/2010 a las 04:28
  #37 (permalink)  
Antiguo 10/01/2010, 17:17
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Me parece bien que hayas reescrito toda esa variable, entendiendo de que se trata. Asi tambien evitamos el error en el copy paste:

Cita:
Se te habia olvidado poner en info, empresa, tecnologia y proyecto.
Cita:
title="'+info+'<br/>'+empresa+'<br/>'+tecnologia+'"
Ahi estaba el error.

En cuanto a tu nuevo planteo: no hay que hacer otro llamado ajax. Porque ya tenemos todo el xml cargado en memoria.

Lo que recorre la etiqueta web se esta funcion:

Cita:
$(xml).find('web').each(function(){

miniatura = $(this).find('proyecto').find('miniatura').text();
imagen = $(this).find('proyecto').find('imagen').text();
info = $(this).find('proyecto').find('info').text();

li = '<li><a href="+imagen+" rel="prettyPhoto[fondos]" title="+info+<br/>+empresa+<br/>+tecnologia+"><img src="+miniatura+" class="imagen_hover" alt="<strong>+proyecto+</strong>"/></a></li>';

$(".galeria").append(li)

}) // fin de each

},
Particularmente, esto es lo que selecciona "web":

Cita:
$(xml).find('web')
Lo que podemos hacer es un array que contenga web, multimedia, movil y erp. Y recorrerlo con un each. Es decir, utilizar una variable ahi donde dice "find"

en pseudo codigo:
- each categoria: $(xml).find(categoria)

  #38 (permalink)  
Antiguo 10/01/2010, 17:31
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Madre mia, ni me acordaba de los arrays. Hice cosas con arrays pero en ActionScript 3 y ni me acuerdo como funcionaban.

Aparte habria que pintar cada una de las secciones en un divisor distinto.

Espero que me puedas ayudar en esto porque en jQuery estoy un poco perdido pero voy aprendiendo poco a poco.

Saludos y Gracias de nuevo ;)
  #39 (permalink)  
Antiguo 11/01/2010, 11:35
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Otro pequeño problema seria que tengo pensado hacer otra llamada $.ajax pero con noticias (noticias.xml).

¿Crearian conflicto entre si?
  #40 (permalink)  
Antiguo 11/01/2010, 11:59
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Cita:
Otro pequeño problema seria que tengo pensado hacer otra llamada $.ajax pero con noticias (noticias.xml).

¿Crearian conflicto entre si?
Para nada.
  #41 (permalink)  
Antiguo 11/01/2010, 12:01
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

En cuanto a lo otro, hace esta prueba :

Cita:
$(xml).each(function(){ alert($(this)); });
Es para saber que retorna el xml. Si solo retorna las etiquetas "web, multimedia, movil y erp" entonces nos ahorramos hacer nosotros el array.

nota: esta funcion de prueba va como reemplazo de la funcion que armamos antes, claro.
  #42 (permalink)  
Antiguo 11/01/2010, 12:40
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Devuelve: [object Object]
  #43 (permalink)  
Antiguo 12/01/2010, 18:01
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Entonces si se pueden hacer dos llamadas tipo $.ajax, ¿seria posible hacer algo parecido a esto?

Código Javascript:
Ver original
  1. // Para TRABAJOS
  2.  
  3.     $.ajax({
  4.    
  5.     type: "POST",
  6.    
  7.     url: "xml/trabajos.xml",
  8.    
  9.     async: false,
  10.    
  11.     dataType: "text",
  12.    
  13.     success: function(data) {
  14.    
  15.     function stringToDoc(s) {
  16.     var xml;
  17.     if (window.ActiveXObject) {
  18.     xml = new ActiveXObject('Microsoft.XMLDOM');
  19.     xml.async = 'false';
  20.     xml.loadXML(s);
  21.     return xml;
  22.     }
  23.     else
  24.     xml = (new DOMParser()).parseFromString(s, 'text/xml');
  25.     return (xml && xml.documentElement && xml.documentElement.tagName
  26.     != 'parsererror') ? xml : null;
  27.     };
  28.     xml = stringToDoc(data);
  29.    
  30.     $(xml).find('web').each(function(){
  31.    
  32.     imagen = $(this).find('imagen').text();
  33.     info = $(this).find('info').text();  
  34.     empresa = $(this).find('empresa').text();
  35.     tecnologia = $(this).find('tecnologia').text();
  36.     miniatura = $(this).find('miniatura').text();
  37.     proyecto = $(this).find('proyecto').text();
  38.    
  39.     li = '<li><a href="'+imagen+'" rel="prettyPhoto[web]" title="'+info+'<br/>'+empresa+'<br/>'+tecnologia+'"><img src="'+miniatura+'" class="imagen_hover" alt="<strong>'+proyecto+'</strong>"/></a></li>';
  40.    
  41.     $(".galeria_web").append(li)
  42.    
  43.     }) // fin de each
  44.    
  45.     },
  46.    
  47.     error: function(avisoError) {
  48.    
  49.     alert("No ha sido posible cargar los datos. Por favor, intentelo mas tarde.");
  50.    
  51.     }
  52.    
  53.     });
  54.  
  55. // Para NOTICIAS
  56.  
  57.     $.ajax({
  58.    
  59.     type: "POST",
  60.    
  61.     url: "xml/noticias.xml",
  62.    
  63.     async: false,
  64.    
  65.     dataType: "text",
  66.    
  67.     success: function(data) {
  68.    
  69.     function stringToDoc(s) {
  70.     var xml;
  71.     if (window.ActiveXObject) {
  72.     xml = new ActiveXObject('Microsoft.XMLDOM');
  73.     xml.async = 'false';
  74.     xml.loadXML(s);
  75.     return xml;
  76.     }
  77.     else
  78.     xml = (new DOMParser()).parseFromString(s, 'text/xml');
  79.     return (xml && xml.documentElement && xml.documentElement.tagName
  80.     != 'parsererror') ? xml : null;
  81.     };
  82.     xml = stringToDoc(data);
  83.    
  84.     $(xml).find('noticia').each(function(){
  85.    
  86.     titulo = $(this).find('titulo').text();
  87.     fecha = $(this).find('fecha').text();  
  88.     info = $(this).find('empresa').text();
  89.    
  90.     not = '<p>'+fecha+'</p><p>'+titulo+'</p><p>'+finfo+'</p>'; 
  91.  
  92.         $(".noticias").append(not)
  93.    
  94.     }) // fin de each
  95.    
  96.     },
  97.    
  98.     error: function(avisoError) {
  99.    
  100.     alert("No ha sido posible cargar los datos. Por favor, intentelo mas tarde.");
  101.    
  102.     }
  103.    
  104.     });

Última edición por Mr_Raymon; 12/03/2010 a las 04:29
  #44 (permalink)  
Antiguo 14/01/2010, 08:53
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Si se puede hacer y lo tengo hecho.

En cuanto a lo que me preguntabas a lo que me salia tecleando esto:

Código Javascript:
Ver original
  1. $(xml).each(function(){ alert($(this)); });

Me devuelve esto: [object Object]

Última edición por Mr_Raymon; 12/03/2010 a las 04:30
  #45 (permalink)  
Antiguo 14/01/2010, 09:36
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Estoy un poco oxidado, pero creo que lo que viene es esto:
Cita:
items = new Array(4);

items[0] = "web";
items[1] = "multimedia";
items[2] = "movil";
items[3] = "erp";
Luego, englobar lo que tenias en una funcion each, que recorra el array:
Cita:
items.each(function(){

$(xml).find($(this)).each(function(){

titulo = $(this).find('titulo').text();
fecha = $(this).find('fecha').text();
info = $(this).find('empresa').text();

not = '<p>'+fecha+'</p><p>'+titulo+'</p><p>'+finfo+'</p>';

$(".noticias").append(not)

}) // fin de each

}) // fin del each por categorias

Última edición por mayid; 14/01/2010 a las 11:56
  #46 (permalink)  
Antiguo 14/01/2010, 10:05
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

¿Donde se pone exactamente los dos codigos? ¿Quizas donde escribimos esto?

Código Javascript:
Ver original
  1. $(xml).find('noticia').each(function(){
  2.  
  3. titulo = $(this).find('titulo').text();
  4. fecha = $(this).find('fecha').text();
  5. info = $(this).find('empresa').text();
  6.  
  7. not = '<p>'+fecha+'</p><p>'+titulo+'</p><p>'+finfo+'</p>'; 
  8.  
  9. $(".noticias").append(not)

Pero en principio quiero pintar en un lugar distinto cada categoria (en vez de .noticias, por ejemplo .web, .multimedia, .movil, etc. Aparte habria que especificarlo de alguna de manera.

Última edición por Mr_Raymon; 12/03/2010 a las 04:30
  #47 (permalink)  
Antiguo 14/01/2010, 11:57
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Despues de esta linea:

Cita:
xml = stringToDoc(data);
Pensa que ya tenias algo escrito. Lo unico que tenes que hacer es envolverlo. Y ahi te marque en rojo lo que envuelve a lo que estaba, cambiando un parametro tambien.

Antes de todo ese trozo de codigo, y despues de la linea que te comenté, pones el resto (la declaración del array).
  #48 (permalink)  
Antiguo 14/01/2010, 13:54
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Entonces ¿tendria que hacerlo asi?

Código Javascript:
Ver original
  1. xml = stringToDoc(data);
  2.  
  3. items = new Array(4);
  4.  
  5. items[0] = "web";
  6. items[1] = "multimedia";
  7. items[2] = "movil";
  8. items[3] = "erp";
  9.  
  10. items.each(function(){
  11.  
  12. $(xml).find($(this)).each(function(){ <- &#191;En (this) pongo cada vez uno diferente (web, multimedia, movil y erp)?
  13.  
  14. titulo = $(this).find('titulo').text();
  15. fecha = $(this).find('fecha').text();
  16. info = $(this).find('empresa').text();
  17.  
  18. not = '<p>'+fecha+'</p><p>'+titulo+'</p><p>'+finfo+'</p>';
  19.  
  20. $(".noticias").append(not)
  21.  
  22. }) // fin de each
  23.  
  24. }) // fin del each por categorias

Última edición por Mr_Raymon; 12/03/2010 a las 04:30
  #49 (permalink)  
Antiguo 14/01/2010, 17:08
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

No, no. Ese $(this) corresponde al primer each, es decir que para cada elemento del array se va a ejecutar una vez la funcion (para web, multimedia, movil y erp). Como ya teniamos otro each, que tambien usa $(this), entonces estaria bueno hacer el codigo menos ambigüo.

Espero que esto funcione:
Cita:
xml = stringToDoc(data);

items = new Array(4);

items[0] = "web";
items[1] = "multimedia";
items[2] = "movil";
items[3] = "erp";

items.each(function(cat){

$(xml).find(cat).each(function(){ <- ¿En (this) pongo cada vez uno diferente (web, multimedia, movil y erp)?

titulo = $(this).find('titulo').text();
fecha = $(this).find('fecha').text();
info = $(this).find('empresa').text();

not = '<p>'+fecha+'</p><p>'+titulo+'</p><p>'+finfo+'</p>';

$(".noticias").append(not)

}) // fin de each

}) // fin del each por categorias
Me gustaria que alguien mas dijera como lo ve.
  #50 (permalink)  
Antiguo 25/01/2010, 03:03
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Perdona por no responder mayid. He estado muy ocupado haciendo algunas cosas y tomandome unos dias de vacaciones.

Lo probare un dia de estos y comento el resultado y dudas tambien ;)

Saludos y Gracias de nuevo por todo :)
  #51 (permalink)  
Antiguo 17/02/2010, 04:20
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Pido perdon de nuevo por el retraso en mi respuesta, ya que he estado liado con muchas cosas y no me he vuelto loco de milagro.

Estoy probando ahora mismo el tema pero no lo tengo claro del todo.

¿Asi es como deberia hacerlo?

Código Javascript:
Ver original
  1. xml = stringToDoc(data);
  2.  
  3. items = new Array(4);
  4.  
  5. items[0] = "web";
  6. items[1] = "multimedia";
  7. items[2] = "movil";
  8. items[3] = "erp";
  9.  
  10. items.each(function(cat){ <- &#191;en "cat" se pone la categoria "web" por ejemplo?
  11.  
  12. $(xml).find(cat).each(function(){  <- &#191;en "cat" se pone la categoria "web" por ejemplo?
  13.  
  14. titulo = $(this).find('titulo').text();
  15. fecha = $(this).find('fecha').text();
  16. info = $(this).find('empresa').text();
  17.  
  18. not = '<p>'+fecha+'</p><p>'+titulo+'</p><p>'+finfo+'</p>';
  19.  
  20. $(".noticias").append(not)
  21.  
  22. }) // fin de each
  23.  
  24. }) // fin del each por categorias

Pongo el codigo que estoy trabajando ahora mismo e intentado hacerlo funcionar.

Código Javascript:
Ver original
  1. $.ajax({
  2.    
  3.     type: "GET",
  4.    
  5.     url: "xml/trabajos.xml",
  6.    
  7.     async: false,
  8.    
  9.     dataType: "text",
  10.    
  11.     success: function(data) {
  12.    
  13.     function stringToDoc(s) {
  14.     var xml;
  15.     if (window.ActiveXObject) {
  16.     xml = new ActiveXObject('Microsoft.XMLDOM');
  17.     xml.async = 'false';
  18.     xml.loadXML(s);
  19.     return xml;
  20.     }
  21.     else
  22.     xml = (new DOMParser()).parseFromString(s, 'text/xml');
  23.     return (xml && xml.documentElement && xml.documentElement.tagName
  24.     != 'parsererror') ? xml : null;
  25.     };
  26.     xml = stringToDoc(data);
  27.  
  28.     items = new Array(4);
  29.  
  30.     items[0] = "web";
  31.     items[1] = "multimedia";
  32.     items[2] = "movil";
  33.     items[3] = "erp";
  34.  
  35.     items.each(function(web){
  36.  
  37.     $(xml).find(web).each(function(){
  38.    
  39.     imagen = $(this).find('imagen').text()
  40.     info = $(this).find('info').text()
  41.     emp = $(this).find('empresa').text()
  42.     tecno = $(this).find('tecnologia').text()
  43.     miniatura = $(this).find('miniatura').text()
  44.     proyecto = $(this).find('proyecto').text()
  45.    
  46.     s_web = '<li><a href="'+imagen+'" rel="prettyPhoto[web]" title="<strong>'+proyecto+'</strong><br/>'+emp+'<br/>'+info+'<br/>'+tecno+'"><img src="'+miniatura+'" class="imagen_hover"></a></li>';
  47.    
  48.     $(".web").append(s_web)
  49.    
  50.     }) // fin de each
  51.    
  52.     }) // fin del each por categorias
  53.    
  54.     error: function(avisoErrorProyecto) {
  55.    
  56.     alert("No ha sido posible cargar los datos. Por favor, intentelo mas tarde.");
  57.    
  58.     }
  59.    
  60.     })  // fin de llamada ajax
  61.  
  62.     }

Y por supuesto tiene que salir la ventana de error de IE diciendo lo siguiente:

Cita:
Detalles de error de página web

Agente de usuario: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)
Fecha: Wed, 17 Feb 2010 10:23:11 UTC

Mensaje: Se esperaba '}'
Línea: 67
Carácter: 3
Código: 0
URI: file:///C:/Documents%20and%20Settings/Casa/Escritorio/Prueba/js/funciones.js
Es justo en la linea del fin de llamada en AJAX.

Cita:
}) // fin de llamada ajax
¿Hay alguna manera para que en Notepad++ detecte automaticamente que puede fallar en el codigo?

Saludos y Gracias ;)

Última edición por Mr_Raymon; 12/03/2010 a las 04:32
  #52 (permalink)  
Antiguo 17/02/2010, 10:17
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Si en Notepad++ haces click sobre una llave, tiene que ponerse de color. Es mas, se ponen de color tanto la llave de apertura como la de cierre. De esta manera sabes si realmente cerraste la llave o no. En tu caso, el error que da IE es fácil de resolver: agragando una llave de cierre en donde te la pide. Chequealo de cualquier manera con el Notepad++ porque IE no es muy inteligente al declarar el numero de renglon...

Respondo a esto: ¿en "cat" se pone la categoria "web" por ejemplo?

"cat" es un parametro. Le sirve a tu función como una variable para referirse a lo que sea que le estes pasando como parametro. En nuestro caso le estamos pasando un array que se llama items. Pero cada uno de esos items tiene un nombre, y tu función no lo sabe. Entonces, para cada uno de esos items tu función utiliza el nombre "cat". Y funciona.
  #53 (permalink)  
Antiguo 20/02/2010, 05:01
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Ya esta arreglado el tema de los dichosos "cierres".

He puesto lo de "cat" en donde tu me has dicho pero no funciona. De hecho ahora me sale el siguiente error, que no tiene sentido:

Cita:
Detalles de error de página web
Agente de usuario: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)
Fecha: Sat, 20 Feb 2010 10:58:42 UTC

Mensaje: El objeto no acepta esta propiedad o método
Línea: 42
Carácter: 2
Código: 0
URI: file:///C:/Documents%20and%20Settings/Casa/Escritorio/Prueba/js/funciones.js
¿Que podria ser? Pego el resultado que tiene ahora mismo.

Código Javascript:
Ver original
  1. items.each(function(cat){
  2. $(xml).find(cat).each(function(){
  3.  
  4. imagen = $(this).find('imagen').text()
  5. info = $(this).find('info').text()
  6. emp = $(this).find('empresa').text()
  7. tecno = $(this).find('tecnologia').text()
  8. miniatura = $(this).find('miniatura').text()
  9. proyecto = $(this).find('proyecto').text()
  10.  
  11. s_web = '<li><a href="'+imagen+'" rel="prettyPhoto[web]" title="<strong>'+proyecto+'</strong><br/>'+emp+'<br/>'+info+'<br/>'+tecno+'"><img src="'+miniatura+'" class="imagen_hover"></a></li>';
  12.  
  13. $(".web").append(s_web)
  14.  
  15. }) // fin de each
  16.  
  17. }) // fin del each por categorias
  18.  
  19. error: function(avisoErrorProyecto) {
  20.  
  21. alert("No ha sido posible cargar los datos. Por favor, intentelo mas tarde.");
  22.  
  23. }
  24.  
  25. }
  26.  
  27. }) // fin de llamada ajax
  28.  
  29. }

Saludos y Gracias de nuevo.

Última edición por Mr_Raymon; 12/03/2010 a las 04:33
  #54 (permalink)  
Antiguo 20/02/2010, 07:28
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Te faltan muchos puntos y comas:

Cita:
imagen = $(this).find('imagen').text()
info = $(this).find('info').text()
emp = $(this).find('empresa').text()
tecno = $(this).find('tecnologia').text()
miniatura = $(this).find('miniatura').text()
proyecto = $(this).find('proyecto').text()
Creo que puede ser eso. Yo tengo pro principio finalizar siempre un renglon con punto y coma.

De cualquier manera, anda probando la función de a pedazos. Para empezar, probamos "el encabezado". Pone solo esto:
Cita:
items.each(function(cat){
$(xml).find(cat).each(function(){

alert(cat);

})
});
Y anda agregando codigo luego, con un alert que te guie en el proceso de debug.
  #55 (permalink)  
Antiguo 01/03/2010, 09:09
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

He probado lo ultimo que has escrito y sigue dando fallo en la misma linea (42, caracter 2).

Tiene pinta que el codigo que has puesto no esta bien por alguna razon.

Voy a escribir el codigo desde el principio y asi poco a poco vere si el fallo esta en alguna otra linea.

De todas formas, ¿donde sacaste la informacion para hacer carga de XML con arrays?

Saludos y Gracias.
  #56 (permalink)  
Antiguo 01/03/2010, 10:34
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

La lectura del xml estaba funcionando. Lo que nos falta implementar es un bucle para que se lea cada una de las categorias. Y creo que esta mal planteado mi bucle, pero que si lo escribis de nuevo todo va a funcionar. Esto es lo que está mal (proba esto solamente a ver si te da el error)

Cita:
items.each(function(cat){
alert(cat)
});
Cita:
¿donde sacaste la informacion para hacer carga de XML con arrays?
Hace unos meses busqué y busqué data sobre xml. Fue muy dificil encontrar algo. Pero creo que la mejor información estaba en wc3school: http://wwww.w3schools.com/dom/dom_examples.asp
  #57 (permalink)  
Antiguo 08/03/2010, 03:35
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Gracias por la URL.

He probado de nuevo y sigue fallando con el mismo error.

Cita:
Mensaje: El objeto no acepta esta propiedad o método
Línea: 42
Carácter: 2
Código: 0
URI: file:///C:/Documents%20and%20Settings/Casa/Escritorio/Prueba/js/funciones.js
Y he añadido el codigo como tu me dijiste

Código Javascript:
Ver original
  1. items = new Array(4);
  2.  
  3.     items[0] = "web";
  4.     items[1] = "multimedia";
  5.     items[2] = "movil";
  6.     items[3] = "erp";
  7.  
  8.     items.each(function(cat){
  9.    
  10.     alert(cat)
  11.    
  12.     })
  13.    
  14.     error: function(avisoErrorProyecto) {
  15.    
  16.     alert("No ha sido posible cargar los datos. Por favor, intentelo mas tarde.");
  17.    
  18.     }
  19.    
  20.     }
  21.    
  22.     })  // fin de llamada ajax
  23.    
  24. }

No consigo dar con la solucion y me estoy volviendo loco .

Última edición por Mr_Raymon; 12/03/2010 a las 04:34
  #58 (permalink)  
Antiguo 08/03/2010, 09:30
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Para el ejemplo, esto tenía que ser borrado:

error: function(avisoErrorProyecto) {

alert("No ha sido posible cargar los datos. Por favor, intentelo mas tarde.");

}

}

}) // fin de llamada ajax

}

Era nada más que esto:

Cita:
items = new Array(4);

items[0] = "web";
items[1] = "multimedia";
items[2] = "movil";
items[3] = "erp";

items.each(function(cat){

alert($(this));

})
Y el resultado tendría que ser cada categoría. Mira el ejemplo en la pagina oficial:
http://api.jquery.com/each/

Si te funciona bien, hace esto:
Cita:
items.each(function(cat){
$(xml).find($(this)).each(function(){

imagen = $(this).find('imagen').text()
info = $(this).find('info').text()
emp = $(this).find('empresa').text()
tecno = $(this).find('tecnologia').text()
miniatura = $(this).find('miniatura').text()
proyecto = $(this).find('proyecto').text()

s_web = '<li><a href="'+imagen+'" rel="prettyPhoto[web]" title="<strong>'+proyecto+'</strong><br/>'+emp+'<br/>'+info+'<br/>'+tecno+'"><img src="'+miniatura+'" class="imagen_hover"></a></li>';

$(".web").append(s_web)

}) // fin de each

}) // fin del each por categorias

error: function(avisoErrorProyecto) {

alert("No ha sido posible cargar los datos. Por favor, intentelo mas tarde.");

}

}

}) // fin de llamada ajax

}
Había un pequeño error al invocar a cat, porque cat representa al índice, y no al objeto en sí.
  #59 (permalink)  
Antiguo 09/03/2010, 03:54
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Combinar Lightbox (jQuery) con datos en XML

He quitado tambien la funcion "error"

Código Javascript:
Ver original
  1. error: function(avisoErrorProyecto) {
  2.  
  3. alert("No ha sido posible cargar los datos. Por favor, intentelo mas tarde.");
  4.  
  5. }

Sigue igual.

He mirado el enlace que me has puesto y lo he estado viendo. Me ha hecho pensar en una cosa. ¿Se puede usar en una variable el each? Porque pone que coge elementos pero no dice nada de variables, arrays en XML. Yo creo que tiene que haber otra funcion para coger un elemento en XML especifico.

Ademas falla (como bien ya sabes de sobra) en la linea 42, caracter 2 que es justo:

Código Javascript:
Ver original
  1. items.each(function(cat){

Lo cual me hace pensar que no es correcta esa parte del codigo y habria que plantearlo de otra manera.

Última edición por Mr_Raymon; 12/03/2010 a las 04:35
  #60 (permalink)  
Antiguo 09/03/2010, 08:16
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Combinar Lightbox (jQuery) con datos en XML

Ah! Entonces será así:

$(items).each(function(cat){

Cita:
pero no dice nada de variables, arrays en XML.
Aqui ni estamos usando variables ni arrays de xml. Simplemente un array, que contiene:
items=new Array("web","multimedia","movil","erp");
Si no estas seguro de como funciona el array, leete esto: http://www.desarrolloweb.com/articulos/630.php

No puedo creer que nos estemos estancando en esto. Lo escribimos solo para no tener que repetir 4 veces la misma lectura al xml, y poder hacerlo con un bucle (each).
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 15:05.