Comunidad de diseño web y desarrollo en internet online

Ajax no renueva el DOM? Como acceder vars fuera de onsuccess

Citar            
MensajeEscrito el 18 Ago 2009 10:40 pm
Hace tiempo uso Ajax con Jquery. Y siempre tengo un inconveniente, que tengo que salvar dando unas vueltas tediosas.

Este es el modelo basico que uso:

$.ajax({
type: "GET",
url: "test.js",
dataType: "xml"
success: function(data) {
contenidos = data;
alert(contenidos) ; }
});

Hoy por hoy intento utilizar un archivo xml , para volcar contenidos en una lista <ul>. Pero en otros casos me pasa lo mismo. Si intento un alert o manipulacion de datos fuera de "success" , no funciona. Las variables no son reconocidas fuera. Y ya no recuerdo, pero creo que he tenido que llenar un div oculto con la data para recuperarlo desde afuera asi $('#div_oculto').text();

En el ejemplo, alert (contenidos) no da resultados fuera de la llamada $.ajax . Por que?

Si bien me cuesta definir el problema, yo creo que el DOM no se esta actualizando debidamente. Me explican?

Por mayid

17 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Ago 2009 12:33 am
La variable es global y si la actualizas dentro de la función success debe de actualizarse, pero hay un problema. Supongamos que tienes este código.

Código Javascript :

var contenidos;
$.ajax({
   type: "GET",
   url: "test.js",
   dataType: "xml"
   success: function(data) {
        contenidos = data;
                                     }
});
alert(contenidos);


La variable contenidos no se actualiza a tiempo. Lanzas la llamada ajax (Ojo: la lanzas, NO la completas) y rapidamente imprimes la variable en una alerta. Entonces, imprimes la variable antes de que esta se actualice. Por ende, los datos que solicitaste, aún no los tienes.

En resumen, la variable si se actualizará, pero tienes que esperar a que la consulta haya terminado antes de ejecutar el script que utilice esa variable.

Espero me hayas entendido. Saludos.

Por ivanfc0o

Claber

391 de clabLevel

3 tutoriales

Genero:Masculino  

Hardcore UI

firefox
Citar            
MensajeEscrito el 21 Ago 2009 02:10 pm
Si, entiendo. Se trata de un flujo vertiginoso, que tengo que pausar de alguna manera.

Gracias.

Por ahora voy a usar success para resolver el tema, pero tendre esto en cuenta para el futuro.


Pero... ¿Ajax no debiera esperar hasta que termine de traer la data antes de dar paso al siguiente comando? Me es dificil asumir este asunto.

Por mayid

17 de clabLevel



 

opera
Citar            
MensajeEscrito el 21 Ago 2009 02:36 pm
Estuve investigando sobre lo que me dijistes, y encontre esto muy util:

async: false,

Asi consigo que el contenido se actualice previo a seguir adelante con el script.

Por mayid

17 de clabLevel



 

opera

 

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