Foros del Web » Programando para Internet » Jquery »

Array de objectos desde XML con JQuery

Estas en el tema de Array de objectos desde XML con JQuery en el foro de Jquery en Foros del Web. Buenas! A ver si me explico bien, pues es la primera vez que uso JQuery (y Javascript, de hecho) y no tengo mucha idea... Quiero ...
  #1 (permalink)  
Antiguo 24/09/2010, 05:43
 
Fecha de Ingreso: octubre-2008
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 1
Array de objectos desde XML con JQuery

Buenas!

A ver si me explico bien, pues es la primera vez que uso JQuery (y Javascript, de hecho) y no tengo mucha idea...

Quiero poner un reproducotr de música en una página web. Encontré el jPlayer (http ://www.happyworm.com/jquery/jplayer) y me gustó la segunda demo (http ://www.happyworm.com/jquery/jplayer/latest/demo-02.htm), así que intenté copiarla.

Por lo visto, el jPlayer carga las playlists de la siguiente forma:

Código Javascript:
Ver original
  1. var myPlayList = [
  2.         {name:"Tempered Song",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-01-Tempered-song.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-01-Tempered-song.ogg"},
  3.         {name:"Hidden",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-02-Hidden.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-02-Hidden.ogg"},
  4.         {name:"Lentement",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-03-Lentement.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-03-Lentement.ogg"},
  5.         {name:"Lismore",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-04-Lismore.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-04-Lismore.ogg"},
  6.         {name:"The Separation",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-05-The-separation.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-05-The-separation.ogg"},
  7.         {name:"Beside Me",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-06-Beside-me.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-06-Beside-me.ogg"},
  8.         {name:"Bubble",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-07-Bubble.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-07-Bubble.ogg"},
  9.         {name:"Stirring of a Fool",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-08-Stirring-of-a-fool.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-08-Stirring-of-a-fool.ogg"},
  10.         {name:"Partir",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-09-Partir.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-09-Partir.ogg"},
  11.         {name:"Thin Ice",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-10-Thin-ice.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-10-Thin-ice.ogg"}
  12.     ];

Yo quiero cargar la playlist desde un archivo XML para podr hacer una playlist dinámica y no tener que estar modificando el archivo cada vez (además, así puedo cargar cosas desde una base de datos vía PHP). Miré por internet y encontré que podría hacerlo así:

Código Javascript:
Ver original
  1. var myPlayList = [];
  2.            
  3.             $.ajax({
  4.                 type: "GET",
  5.                 url: "playlist.xml",
  6.                 dataType: "xml",
  7.                 success: function(xml) {
  8.                    
  9.                     $(xml).find('song').each(function(){
  10.                         var id = $(this).attr('id');
  11.                         var title = $(this).find('title').text();
  12.                         var mp3 = $(this).find('mp3').text();
  13.                         var ogg = $(this).find('ogg').text();
  14.                         var plays = $(this).find('plays').text();
  15.                        
  16.                         document.write(id + " - ");
  17.                         document.write(title);
  18.                         document.write(" (" + mp3 + ", ");
  19.                         document.write(ogg + ")");
  20.                         document.write(" - " + plays + "<br />");
  21.                        
  22.                         myPlayList.push({name:title,mp3:mp3,ogg:ogg,plays:plays});
  23.                     });
  24.                    
  25.                 }      
  26.             });

el problema que tengo es que si salgo del bloque de código e intento mostrar algun valor de este array no me devuelve nada:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.             var playItem = 0;
  3.            
  4.             var myPlayList = [];
  5.            
  6.             $.ajax({
  7.                 type: "GET",
  8.                 url: "playlist.xml",
  9.                 dataType: "xml",
  10.                 success: function(xml) {
  11.                    
  12.                     $(xml).find('song').each(function(){
  13.                         var id = $(this).attr('id');
  14.                         var title = $(this).find('title').text();
  15.                         var mp3 = $(this).find('mp3').text();
  16.                         var ogg = $(this).find('ogg').text();
  17.                         var plays = $(this).find('plays').text();
  18.                        
  19.                         document.write(id + " - ");
  20.                         document.write(title);
  21.                         document.write(" (" + mp3 + ", ");
  22.                         document.write(ogg + ")");
  23.                         document.write(" - " + plays + "<br />");
  24.                        
  25.                         myPlayList.push({name:title,mp3:mp3,ogg:ogg,plays:plays});
  26.                     });
  27.                    
  28.                 }      
  29.             });
  30.                    
  31.             document.write(myPlayList[0].name);

Esto, por ejemplo, no muestra nada.

La estructura XML es:

Código XML:
Ver original
  1. <songs>
  2.         <song id="0">
  3.                 <title>Tramaran anar a Mart</title>
  4.                 <mp3>tramaran.mp3</mp3>
  5.                 <ogg>tramaran.ogg</ogg>
  6.                 <plays>328</plays>
  7.         </song>
  8.         <song id="1">
  9.                 <title>Les Quatre Estacions</title>
  10.                 <mp3>quatreestacions.mp3</mp3>
  11.                 <ogg>quatreestacions.ogg</ogg>
  12.                 <plays>122</plays>
  13.         </song>
  14.         <song id="2">
  15.                 <title>D'aquí 5 anys</title>
  16.             <mp3>5anys.mp3</mp3>
  17.             <ogg>5anys.ogg</ogg>
  18.                 <plays>299</plays>
  19.         </song>
  20. </songs>

Resumiendo, quería substituir el array "myPlayList" por otro array igual pero que obtenga valores a través de XML... Alguna ayudita, por favor?
  #2 (permalink)  
Antiguo 24/09/2010, 08:13
 
Fecha de Ingreso: enero-2008
Ubicación: Buenos Aires
Mensajes: 305
Antigüedad: 16 años, 3 meses
Puntos: 14
Respuesta: Array de objectos desde XML con JQuery

El archivo original de playlist del jPlayer que tú muestras esta con json, y si revisas la función $.ajax(), puedes tomar los valores por json. Yo te recomiendo hacer directamente eso y no tenes que parsear el xml para armar las listas, sino que te generas un archivo de playlist dinámicas en json y listo.

Eso haría yo.
  #3 (permalink)  
Antiguo 24/09/2010, 08:20
 
Fecha de Ingreso: octubre-2008
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Array de objectos desde XML con JQuery

Podrías poner un ejemplo de como hacerlo? No tengo ni idea... :S
  #4 (permalink)  
Antiguo 24/09/2010, 08:51
 
Fecha de Ingreso: enero-2008
Ubicación: Buenos Aires
Mensajes: 305
Antigüedad: 16 años, 3 meses
Puntos: 14
Respuesta: Array de objectos desde XML con JQuery

Te creas un archivo json o un php, que tiene una función para retornar la representacion JSON de un array. La funcion es json_encode( $array ).

En caso de usar un archivo ya armado, por ejemplo:

myPlayList.json
Código JSON:
Ver original
  1. [
  2.         {name:"Tempered Song",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-01-Tempered-song.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-01-Tempered-song.ogg"},
  3.         {name:"Hidden",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-02-Hidden.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-02-Hidden.ogg"},
  4.         {name:"Lentement",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-03-Lentement.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-03-Lentement.ogg"},
  5.         {name:"Lismore",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-04-Lismore.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-04-Lismore.ogg"},
  6.         {name:"The Separation",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-05-The-separation.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-05-The-separation.ogg"},
  7.         {name:"Beside Me",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-06-Beside-me.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-06-Beside-me.ogg"},
  8.         {name:"Bubble",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-07-Bubble.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-07-Bubble.ogg"},
  9.         {name:"Stirring of a Fool",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-08-Stirring-of-a-fool.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-08-Stirring-of-a-fool.ogg"},
  10.         {name:"Partir",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-09-Partir.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-09-Partir.ogg"},
  11.         {name:"Thin Ice",mp3:"http://www.miaowmusic.com/audio/mp3/Miaow-10-Thin-ice.mp3",ogg:"http://www.miaowmusic.com/audio/ogg/Miaow-10-Thin-ice.ogg"}
  12.     ]

Y luego lo llamas desde javascrip de esta manera:
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.   $.ajax({
  3.     url: "myPlayList.json",
  4.     dataType: "json",
  5.     success:
  6.       function( data ){
  7.         alert( data ); // data = array de objetos
  8.         alert( data[0].name ); // nombre del objeto 1      
  9.       }
  10.   });
  11. });
  #5 (permalink)  
Antiguo 24/09/2010, 09:56
 
Fecha de Ingreso: octubre-2008
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Array de objectos desde XML con JQuery

Oh, perfecto! :) Nunca me había mirado jQuery, tendré que empezar a usarlo de vez en cuando...

Muchísimas gracias! :)

PD: no se si sirve de algo, pero te he dado un poco de karma por la rapidez de la respuesta :)

Etiquetas: objectos, xml
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 23:06.