Comunidad de diseño web y desarrollo en internet online

¿Leer un texto con Javascript?

Citar            
MensajeEscrito el 10 Jul 2012 07:17 am
Hola

Estoy realizando un pequeño script que necesita cargar aleatoriamente un texto en un div y no se como hacer que javascript me lea ese texto, son unos 60 textos y para no hacer un array con todos los textos dentro había pensado meterlos en archivos externos .txt o .xml y desde javascript coger cada vez uno aleatoriamente, leer su contenido y insertarlo en el div en cuestión ¿esto se puede hacer?

Un saludo y gracias!

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Jul 2012 02:07 pm

Por ldgmmorales

Claber

142 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Jul 2012 09:10 am
Muchas gracias! Voy a echarle un ojo ;)

Un saludo!

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Jul 2012 12:01 pm
En esta web encontré un ejemplo muy claro y sencillo:
http://webhole.net/2009/12/16/how-to-read-xml-with-javascript/

Pero me encuentro un problema y no entiendo por que me sucede... :(

Yo lo que quiero es rellenar un array con elementos del xml, o sea por cada etiqueta "x" cógeme el texto de la etiqueta hija "y" y mételos al array. El problema es que este array esta declarado fuera o sea es global (pq luego debe ser usado por un generador aleatorio que aparece mas adelante en el código) y me encuentro que la función no me añade los elementos al array como si la variable no fuese global o algo así. Dejo el codigo por si se entiende mejor lo que quiero decir:

Código :

//Textos
var posicionesTextos = new Array;
posicionesTextos.push(""); //posicion 0 vacia, comienza a contar de 1

//Rellenar array con ajax / jquery / xml
function parse(document){
  $(document).find("iching").each(function(){
   var texto = $(this).find('texto').text();
    posicionesTextos.push(texto);   
  });
}

$.ajax({
    url: 'iching.xml',
    dataType: "xml",
    success: parse,
   error: function(){alert("Error Ajax XML");}
});

alert(posicionesTextos);


El ultimo alert lo he puesto para comprobar que me este rellenando el array y sucede que me sale solo la posición 0 o sea en blanco, como si la funcion no hubiera rellenado el array.
Lo raro es que si meto el alert debajo de

Código :

posicionesTextos.push(texto);
si me sale como va llenandose el array con los textos tal y como quiero!

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Jul 2012 01:25 pm
es que en tu succes efectivamente mandas llamar la funcion llamada parse pero no le estas pasando el parametro que viene siendo document

$.ajax({
url: 'iching.xml',
dataType: "xml",
success: function(myXML){
parse(myXML)
},
error: function(){alert("Error Ajax XML");}
});

intenta hacerle un alert a DOCUMENT a ver si asi ya te reconoce el archivo

Por ldgmmorales

Claber

142 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Jul 2012 03:46 pm
Si, el archivo lo reconoce y la función funciona pues si pongo el alert así:

Código Javascript :

//Textos
var posicionesTextos = new Array;
posicionesTextos.push(""); //posicion 0 vacia, comienza a contar de 1

//Rellena array con ajax / jquery / xml
function parse(document){
  $(document).find("iching").each(function(){
   var texto = $(this).find('texto').text();
    posicionesTextos.push(texto);   
   alert(posicionesTextos); //<------- Devuelve alerts por cada elemento que añade al array y con el texto correspondiente del documento.
  });
}

$.ajax({
    url: 'iching.xml',
    dataType: "xml",
    success: parse,
   error: function(){alert("Error Ajax XML");}
});


Devuelve alerts por cada elemento que añade al array y con el texto correspondiente del documento, por lo tanto la funcion se ejecuta y añade los elementos del documento al array.
Pero si leo el array desde fuera parec que no...como si fuesen dos arrays distintos...o se borrase y "reiniciase"...no se, no entiendo de donde viene el problema... :(

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Jul 2012 04:12 pm
Probando veo que mientras deje el alert dentro de la función va perfecto y si lee la variable/array global pues desde si fuera de la función le meto antes de ella más valores me muestra los que le metido fuera más los de dentro del bucle jquery, o sea funciona perfecto y hace justo lo que yo quiero, pero a la que pongo el alert fuera de la función, desaparecen los valores que le dio el bucle...como si nada hubiera pasado...

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Jul 2012 07:30 pm
Mira lo que veo es que si te pone los resultados de tu texto pero todos estan juntos en el campo 0 ando viendo el porque...

Por ldgmmorales

Claber

142 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Jul 2012 07:36 pm
Ya di con tu error

function parseXMl(document){

$(document).find("iching").find('texto').each(function(){

var texto = $(this).text();

posicionesTextos.push(texto);
//console.log(posicionesTextos)

});

}
el problema es que estas buscando en PRODUCTOS y no vas hacer un EACH de los productos SINO de TEXTO es por eso que te salia mal mira el EACH como kedo y veras que funciona, el console.log es de la consola de javascript que trae el firebug de firefox

Por ldgmmorales

Claber

142 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Jul 2012 07:43 pm
Gracias por tus respuestas ;)

ldgmmorales escribió:

Mira lo que veo es que si te pone los resultados de tu texto pero todos estan juntos en el campo 0 ando viendo el porque...


No, eso funciona ok, lo he comprobado cada texto me lo pone en un campo distinto, si hago por ejemplo alert(posicionesTextos[3]); me saca solo ese campo.

Pero el problema es el mismo, si saco el alert de la función ya no sale ninguno :(

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Jul 2012 07:48 pm

ldgmmorales escribió:

Ya di con tu error

function parseXMl(document){

$(document).find("iching").find('texto').each(function(){

var texto = $(this).text();

posicionesTextos.push(texto);
//console.log(posicionesTextos)

});

}
el problema es que estas buscando en PRODUCTOS y no vas hacer un EACH de los productos SINO de TEXTO es por eso que te salia mal mira el EACH como kedo y veras que funciona, el console.log es de la consola de javascript que trae el firebug de firefox


Gracias de nuevo, pero creo que hay no esta el fallo. Tal como lo tengo me rellena el array perfecto tal y como yo quiero pero solo en la función, luego fuera de esa función el array esta vació.

dejo aqui el xml:

Código XML :

<?xml version="1.0" encoding="UTF-8"?>
<ichines>
   <iching>
      <titulo>Chien: El Creativo, 1</titulo>
      <texto>Tu coraje y tu perseverancia te premiarán con un importante éxito. Si sabrás llevar adelante tus acciones y tus ideales con sentido de justicia, también las fuerzas del cielo te sostendrán y obtendrás el éxito deseado. Mantiene siempre tu espíritu en armonía con la naturaleza.</texto>
   </iching>
   <iching>
      <titulo>Kun: Lo Receptivo,2</titulo>
      <texto>Para no desanimarte es imprescindible que seas paciente y que no decidas de forzar los evientos. Obtendrás grandes beneficios y ventajas si sabrás adecuarte a las distintas situaciones colaborando con todos sin tomar iniciativas. Esta actitud te permitirá lograr tus objetivos. </texto>
   </iching>
   <iching>
      <titulo>Chun: La Dificultad inicial,3</titulo>
      <texto>Si deseas emprender algo nuevo, ten en cuenta las dificultades iniciales. La paciencia y la confianza en tus objetivos te ayudarán pero no serán suficientes: debes elegir alguien que pueda ayudarte y aceptar de buena gana los consejos de los demás.</texto>
   </iching>
</ichines>

Por Sergi0

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Jul 2012 11:05 pm
Desvelado el misterio! :D

Gracias a probar lo del console log me di cuenta de algo y es que los console log se ejecutaba en otro orden diferente a como estaban en el código por eso salían sin esas posiciones del array pq el código aun no había pasado por allí pese a estar antes.

La conclusión que saco es que aunque el código este en ese orden al parecer la sentencia ajax (que es la que llama al a función dichosa), se ejecuta al final de todo independientemente de en que parte del código se encuentre, por lo tanto si estaba funcionando bien desde el principio pero no lo veía pq el orden de los alerts no era el real.

Poniéndole un console log en la función que más adelante extrae una posición del array aleatoriamente me funciona perfecto pues esta es llamada por un botón y para cuando el usuario haga click en el botón todo el código incluido el ajax final estará ya ejecutado y por lo tanto el array rellenado ;)

Un saludo y gracias de nuevo ;)

Por Sergi0

42 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.