Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/11/2010, 04:08
lando82
 
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>