Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Array de Objetos en Javascript

Estas en el tema de Array de Objetos en Javascript en el foro de Frameworks JS en Foros del Web. Hola, tengo un problema sobre los arrays de objetos. El siguiente código crea un array de objetos (eventos), pero no en el momento que termina ...
  #1 (permalink)  
Antiguo 08/11/2010, 04:08
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 0
Array de Objetos en Javascript

Hola, tengo un problema sobre los arrays de objetos. El siguiente código crea un array de objetos (eventos), pero no en el momento que termina de ejecutarse el código. Es decir, tengo que poner un breakpoint (uso firefox con firebug) para que eventos.length tenga una longitud de 25 (que es la que tiene que tener). Si no pongo un breakpoint, resulta que eventos.length = 0.
Además, el firebug no siempre recoge el valor del array (relleno por los objetos), debo darle a refrescar (refresh), aunque me han dicho que esto puede ser normal en el firebug, ya que no siempre recoge los valores de las variables a la primera.

Como pueden ver utilizo Jquery v1.4 y el código lo que hace es leer un XML externo y recoge los datos en el array de objetos.

¿Es esto normal?¿A que se debe esto?¿Cómo puedo solucionarlo?

Muchas gracias a todos,


Cita:
<html>
<head><title>Prueba de lectura de fichero XML</title></head>
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
var eventos = [];
$(function() {
//$('#dentro a').click(function() {
$.ajax({
type: "GET",
url: "prueba.xml",
dataType: "xml",
success: function(xml) {

$(xml).find('contentSet').each(function(){
var evento = {};
//var name_text = $(this).find('name').text()
var id_text =""
$(this).find('sports-content-qualifier').each(function(){
evento.genero = $(this).attr('gender');
evento.indequi = $(this).attr('participant-count');
id_text = evento.genero +' '
id_text= id_text + evento.indequi
}); //cerrar each genero y participantes
var deporte = ""

$(this).find('sports-content-code').each(function(){
deporte = deporte + ' ' +$(this).attr('code-name')

}); // cerrar each deporte
evento.deporte = deporte
id_text = id_text + ' ' + evento.deporte

evento.ronda = $(this).find('tournament-round-metadata').attr('round-name')
id_text = id_text + ' ' + evento.ronda


$(this).find('remoteContent').each( function() {
evento.duracion = $(this).attr('duration')
evento.video = $(this).attr('href')
id_text = id_text + " "+evento.duracion+ " "+evento.video
})

if ($(this).find('event-metadata').attr('start-date-time') !== undefined){
evento.fechainicio = $(this).find('event-metadata').attr('start-date-time')
} else {
evento.fechainicio = $(this).find('tournament-round-metadata').attr('start-date-time')
}
id_text = id_text + ' ' + evento.fechainicio

evento.participantes = []

if (evento.indequi === "individual"){
$(this).find('player-metadata').each(function(){
var participante = {}
participante.nombre = $(this).find('name').attr('first')+" "+ $(this).find('name').attr('last')
participante.pais = $(this).find('home-location').attr('country')
evento.participantes.push(participante);
})
} else {
$(this).find('team-metadata').each(function(){
var participante = {}
participante.nombre = $(this).find('name').text()
participante.pais = $(this).find('home-location').attr('country')
evento.participantes.push(participante);
})
}
$('<li></li>')
.html(id_text)
.appendTo('#dentro ol');
eventos.push(evento); //añadir nuevo elemento a eventos
}); //close each de evento

}

});

alert(eventos.length);
});
</script>

<body>
<div id='dentro'>
<ol></ol>
</div>
</body>
</html>
  #2 (permalink)  
Antiguo 08/11/2010, 04:43
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 10 meses
Puntos: 772
Hola lando82. Bienvenido al foro.

Muevo tu tema al foro de Frameworks y Plugins Javascript desde Javascript.

Saludos,
  #3 (permalink)  
Antiguo 08/11/2010, 10:10
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 9 meses
Puntos: 101
Respuesta: Array de Objetos en Javascript

Es un error de publicacion o de verdad no cerras las lineas con ;?

Cita:
evento.duracion = $(this).attr('duration')
evento.video = $(this).attr('href')
id_text = id_text + " "+evento.duracion+ " "+evento.video
...
id_text = id_text + ' ' + evento.fechainicio

evento.participantes = []
Eso debería darte error en la consola del firebug.
  #4 (permalink)  
Antiguo 08/11/2010, 13:54
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 46
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: Array de Objetos en Javascript

Resulta imposible (al menos a mi), seguir rápidamente el código sin ninguna indentación ni coloreado.

Lo que se me ocurre que te puede estar pasando es que tengas el alert en el evento 'ready'. El problema sería que estas enviando una petición AJAX (asíncrona) y a continuación estas haciendo el alert. La petición AJAX mientras tanto viaja al servidor, se está ejecutando, etc y ni siquiera se ha recibido la respuesta cuando tu estás intentando verla.

Si este es el problema puedes solucionarlo simplemente poniendo el alert. Al final de la función que se ejecuta con la respuesta AJAX, la que tiene el XML como parámetro.

@mayid. Aunque es una buena práctica, JavaScript realmente no necesita cerrar las líneas con ;, basta con el salto de línea.
__________________
Quizá te interese mi Tutorial de JavaScript Orientado a Objetos.

Nuevo: CSS Floats: Tutorial Visual

Etiquetas: javascript, objetos
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 19:45.