Foro

valores fuera del Ext.Ajax.request

0
buenas tardes a esta gran comunidad, soy algo nuevo en esto del extjs, mi pregunta es la siguiente como hago para sacar un valor del ajax.request

Apply the template to see results here

Name: {name}

Company: {company}

Location: {city}, {state}

Kids: ', '', '

{}. {parent.name}\'s kid - {name}

', '

este seria el log.php true, "user" => $_SESSION['name'] ); //var_dump($data); echo json_encode($data); ?> bueno tome un ejemplo de tpl que encontre en internet y le agregue un Ext.Ajax.request, alli busco la variable de sesion name $_SESSION['name'], dicha informacion la trae perfectamente, el problema es cuando trato de darlo ese valor al campo name que esta dentro del arreglo dato, realmente ni idea como la puedo sacar de alli, y yo que pensaba que habia entendido aquello de los scope, y digo yo si es eso, si alguien me puede ayudar a aprender mil gracias de antemano...
0
Tu problema se basa en la manera en como estás percibiendo el funcionamiento de Ajax, recordar que es Asíncrono!! y tu estás viéndolo Sincrono!! ahí esta el problema!! Ahora bien, para solucionarlo tendrías que hacer algo como lo siguiente: function doAjax(){ Ext.Ajax.request({ url : 'log.php', // method: 'GET', success: function( resp ){ var jsonData = Ext.util.JSON.decode(resp.responseText); createPanel(jsonData); //LE ENVIAS EL OBJETO CON TODOS LOS CAMPOS }, failure: function ( result, request ) { var jsonData = Ext.util.JSON.decode(result.responseText); var resultMessage = jsonData.data.result; fn_AKExt(resultMessage, 'Error'); } }); } function createPanel(info){ var data = { name: info.nombre, company: 'Ext JS, LLC', //info.company address: '4 Red Bulls Drive', //info.address city: 'Cleveland', state: 'Ohio', zip: '44102', kids: [{ name: 'Sara Grace', age:3 },{ name: 'Zachary', age:2 },{ name: 'John James', age:0 }] }; var p2 = new Ext.Panel({ title: 'XTemplate', width: 300, html: '

Apply the template to see results here

', tbar: [{ text: 'Apply Template', handler: function(){ var tpl = new Ext.XTemplate( '

Name: {name}

', '

Company: {company}

', '

Location: {city}, {state}

', '

Kids: ', '', '

{}. {parent.name}\'s kid - {name}

', '

' ); tpl.overwrite(p2.body, data); p2.body.highlight('#c3daf9', {block:true}); } }], renderTo: document.body }); } doAjax(); //Inicias todo el proceso Si te das cuenta, he metido la creación del panel dentro de una función la cual recibe un objeto "info" donde deberían venir todos los campos que regreso el servidor, esta función se invoca en el success del request. Saludos
0
esta respuesta me fue dada por el sr Ramrio P Saenz [garraS] resuelve exelentemente, pero como se ve, la variable sigue en el ambito de success, y mi pregunta sigue en pie ejejjee, puedo usarla fuera de ese ambito, yo se que no se deberia usar, pero hipoteticamente, no se le puede asignar a una variable global?

Apply the template to see results here < /p>', tbar: [{ text: 'Apply Template', handler: function () { Ext.Ajax.request({ url: 'log.php', // method: 'GET', success: function (resp) { var jsonData = Ext.util.JSON.decode(resp.responseText); data.name = jsonData.user; var tpl = new Ext.XTemplate('

Name: {name}

', '

Company: {company}

', '

Location: {city}, {state}

', '

Kids: ', '', '

{}. {parent.name}\'s kid - {name}

', '

'); tpl.overwrite(p2.body, data); p2.body.highlight('#c3daf9', { block: true }); }, failure: function (result, request) { var jsonData = Ext.util.JSON.decode(result.responseText); var resultMessage = jsonData.data.result; fn_AKExt(resultMessage, 'Error'); } }); } }], renderTo: document.body }); });
0
muchas gracias por responder tan rapido tokkaido, si supieras mi problema no esta tanto en el ajax.request, por que yo veo mis valores, lo que arroja el php, en este caso mi variable de sesion, el problema es donde necesito usar esa valor, ejemplo function joAjax(){ Ext.Ajax.request({ url: ajax.php success:funciont(resp){ var jsonData= Ext.decode(resp.responseText);// hasta aqui estamos bien yo obtengo mi valor o el que necesito, de hecho hago un alert(jsonData.user) , y me da el msg mostrandome el usuario //pero yo necesito es esto nombre = jsonData.user; aqui le asigno el valor a la variable nombre }, scope:this }); }; var data = { name = nombre //aqui es donde me da el error, acoto lo de scope:this no lo sabia lo acabo de poner ahorita pero es algo que no entiendo mucho } no se si eso se puede o no se puede hacer, dado que buscando en este foro, encontre una respuesta de crysfel, donde el decia que tenia que cargar dicha informacion dentro del success creo fue lo que entendi, y esta respeusta se encuentra en la pregunta contexto de las variables realizada por wonder y de pana muchas gracias por tan pronta intervencion
0
En el Ext.Ajax.request tienes 2 propiedades: success y failure: en el primero (success) puedes recuperar los datos que desde el lado del servidor envias usando el formato JSON, estos datos los manejas a traves del objeto devuelto, te dejo un ejemplo por si te sirve Ext.Ajax.request({ url: 'aqui_tu_php.php', params : { //parametros que quieras enviar a tu pagina php miparametro : 'el valor de mi parametro' }, scope : this, success : function(response){ //el success es cuando efectivamente dio con la pagina //en la variable response o como quieras colocarle //se devuelve todo tu JSON //aqui por ejemplo se lo asigno y decodifico a una variable que llamo info info = Ext.decode(response.responseText); //aqui pergunto si el valor de success es false //para devolverel al usuario un error personalizado if (info.success === false){ Ext.Msg.show({ title : 'ERROR', msg : 'mi mensaje!', icon : Ext.MessageBox.ERROR, buttons: Ext.Msg.OK, fn : function(){ //cualquier cosa que quieras despues del error }); } }); }else{ //si el valor de success es true entonces hago algo con los valores almacenados en // info, prueba hacer un console.debug(info) y veras como se almacenan tus datos. } }, failure: function(response){ //aqui es por si no te logro conectar o dio un error, no tiene relación con el // {"success": false} } espero te sirva

¿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.