[solucionado] crear objeto usuario
hola, se que esto es mas de javascript que directa a Ext Js pero es para usarlo en mi proyecto extjs <!-- s:? --><!-- s:? -->
qu9iero crear un objeto llamado usuario al cual pasarle parametros como nombre completo, nombre de usuario , email, etc. cargados desde la BD
lo intento asi:
var usuario = new Object(); usuario.nombre = function(){ Ext.Ajax.request({ url: 'php/leer_usuario.php', success: function(response){ info = Ext.decode(response.responseText); return info.nombre; } }); }; console.debug(usuario.nombre);pero me devuelve el codigo en vez de la propiedad. alguna idea? <!-- s:?: --><!-- s:?: --> <!-- s:?: --><!-- s:?: -->
Holas, te devuelve el código porque deberías invocarlo de la siguiente manera usuario.nombre(), cuando lo invocas con usuario.nombre, obtienes la referencia del function que has declarado.
Peeeero haciendo esto, igual no te devolvará lo que deseas. Lo que pasa es que el Ext.Ajax.request es asíncrono y crea como un hilo de ejecución, y la función que invocas "usuario.nombre()", es secuencial y no espera que haya una respuesta success del Ajax.request, el sigue ejecutando la siguiente linea.
Lo único que podrías hacer es programar en el success, o desde dentro del success llamar a tu función de carga de datos para el objeto usuario.
Espero te sirva lo que te comento.
Esto es un concepto propio de "Ajax", en cualquier libería es lo mismo... como bien te comenta "mayerhorna", cuando haces una petición al servidor po medio de Ajax se hace asíncronamente <!-- s;) --><!-- s;) -->
La solución es poner un "listener" en el evento "success", algo así:
var usuario = new Object(); //paso 1 Ext.Ajax.request({ //paso 2 url: 'php/leer_usuario.php', success: function(response){ info = Ext.decode(response.responseText);//paso 4 usuario.nombre = info.nombre; //paso 5 console.debug(usuario.nombre); // paso 6, hasta aquí "nombre" contendrá algo } }); console.debug(usuario.nombre); // paso 3, aquí nombre es "undefined" porque no existeHe numerado como el compilador ejecutaría el código anterior, 1,2,3,4... paso 1, creas el objeto "user" paso 2, haces una llamada ajax al servidor paso 3, imprime una propiedad no definida en el objeto "user" (aquí termina ejecución del código principal) paso 4, cuando el servidor responde decodificas la respuesta paso 5, creas la propeidad "nombre" en el objeto "usuario" paso 6, ya puedes utilizar la propiedad "nombre" (aqui termina la ejecución del "listener") saludos
gracias a sus comentarios comprendo ahora el porque mi variable aun no es definida, pero aun no logro hacer que esté lista para cuando la necesito que es para asignarla a un boton de mi toolbar.
aqui pueden ver un screenshot de mi aplicacion:
[url]http://www.tokkaido.cl/undefined.JPG[/url]
creo el elemento de la sguiente manera:
Ext.onReady(function() { Ext.QuickTips.init(); var usuario = new Object(); Ext.Ajax.request({ url: 'php/leer_usuario.php', success: function(response){ info = Ext.decode(response.responseText); usuario.nombre = info.usuario[0].nombre; console.debug(usuario.nombre); } }); ....he intentado colocando un llamado a una funcion dentro del evento 'success' que le pase el parametro 'nombre' al objeto usuario, pero sigue siendo 'undefined' cuando carga la pagina. entiendo el hecho de que el procedimiento sea asincronico, lo que quiere decir que se ejecuta de manera no secuencial por lo que cuando quiero utilizar la propiedad nombre de mi objeto usuario esta aun no existe, pero como puedo hacer que exista para cuando la necesito? la he colocado incluso antes del Ext.onReady pensando que asi estaria creada antes de necesitarla pero nop <!-- s:roll: --><!-- s:roll: --> . alguna pista?
lo que necesitas hacer es actualizar el texto de tu botón en el "success" de la petición Ajax <!-- s;) --><!-- s;) --> te sugiero asignarle un ID al botón para que luego lo puedas acceder y actualizar.
success: function(response){ var info = Ext.decode(response.responseText); usuario.nombre = info.usuario[0].nombre; Ext.getCmp('botonId').setText(usuario.nombre); //actualizas el botón }saludos
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.