Templates y Temas para ExtJS y Sencha Touch Bleext!
Bleextop! un desktop OpenSource para Ext4 y CodeIgniter http://bit.ly/pUwLJO
valores fuera del Ext.Ajax.request
  • Vote Up0Vote Down jdhadesjdhades December 2010
    Posts: 3
    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


    <script type="text/javascript">
    Ext.onReady(function() {
    Ext.QuickTips.init();
    nombre = '';
    function doAjax(){
    Ext.Ajax.request({
    url : 'log.php',
    // method: 'GET',
    success: function( resp ){
    var jsonData = Ext.util.JSON.decode(resp.responseText);
    return(jsonData.user);

    },
    failure: function ( result, request ) {
    var jsonData = Ext.util.JSON.decode(result.responseText);
    var resultMessage = jsonData.data.result;
    fn_AKExt(resultMessage, 'Error');
    }
    });

    }

    var data = {
    name: doAjax(),
    company: 'Ext JS, LLC',
    address: '4 Red Bulls Drive',
    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: '<p><i>Apply the template to see results here</i></p>',
    tbar: [{
    text: 'Apply Template',
    handler: function(){

    var tpl = new Ext.XTemplate(
    '<p>Name: {name}</p>',
    '<p>Company: {company}</p>',
    '<p>Location: {city}, {state}</p>',
    '<p>Kids: ',
    '<tpl for="kids" if="name==\'Jack Slocum\'">',
    '<tpl if="age &gt; 1"><p>{}. {parent.name}\'s kid - {name}</p></tpl>',
    '</tpl></p>'
    );
    tpl.overwrite(p2.body, data);
    p2.body.highlight('#c3daf9', {block:true});
    }
    }],

    renderTo: document.body
    });



    });
    </script>


    este seria el log.php

    <?php session_start();
    $data=array (
    "success" => 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...
  • 4 Answers sorted by
  • Vote Up0Vote Down tokkaidotokkaido December 2010
    Posts: 395
    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
  • Vote Up0Vote Down jdhadesjdhades December 2010
    Posts: 3
    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
  • Vote Up0Vote Down jdhadesjdhades December 2010
    Posts: 3
    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?


    <script type="text/javascript">
    Ext.onReady(function() {
    Ext.QuickTips.init();

    /*function doAjax(){
    Ext.Ajax.request({
    url : 'log.php',
    // method: 'GET',
    success: function( resp ){
    var jsonData = Ext.util.JSON.decode(resp.responseText);
    nombre = jsonData.user;
    alert(nombre);

    },
    failure: function ( result, request ) {
    var jsonData = Ext.util.JSON.decode(result.responseText);
    var resultMessage = jsonData.data.result;
    fn_AKExt(resultMessage, 'Error');
    },
    scope:this
    });


    }*/


    var data = {
    name: '',
    company: 'Ext JS, LLC',
    address: '4 Red Bulls Drive',
    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: '<p><i>Apply the template to see results here</i > < /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('<p>Name: {name}</p>', '<p>Company: {company}</p>', '<p>Location: {city}, {state}</p>', '<p>Kids: ', '<tpl for="kids" if="name==\'Jack Slocum\'">', '<tpl if="age &gt; 1"><p>{}. {parent.name}\'s kid - {name}</p></tpl>', '</tpl></p>');
    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
    });



    });
    </script>

  • Vote Up0Vote Down CrysfelCrysfel December 2010
    Posts: 897
    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: '<p><i>Apply the template to see results here</i></p>',
    tbar: [{
    text: 'Apply Template',
    handler: function(){

    var tpl = new Ext.XTemplate(
    '<p>Name: {name}</p>',
    '<p>Company: {company}</p>',
    '<p>Location: {city}, {state}</p>',
    '<p>Kids: ',
    '<tpl for="kids" if="name==\'Jack Slocum\'">',
    '<tpl if="age &gt; 1"><p>{}. {parent.name}\'s kid - {name}</p></tpl>',
    '</tpl></p>'
    );
    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

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook Sign In with Twitter

Sign In Apply for Membership

In this Discussion

Poll

No poll attached to this discussion.

Tagged