Extjs: установить переменную после запроса ajax - PullRequest
0 голосов
/ 16 марта 2012

Как я могу установить переменную "price" после вызова ajax? вот код:

                var price;
                var idProd = data.prodotto_id;

                var cb = function (o,s,r){

                    price = Ext.util.JSON.decode(r.responseText).price;
                    console.log(price);
                };
                    Ext.Ajax.request({
                        url : "index.php",
                        params : {
                            m : "Prodotti",
                            a : 'prod-price-byquantity',
                            idProd : idProd,
                            quantity: qta
                        },
                        callback : cb,
                        scope : this
                    });


                console.log(price);

В последнем файле console.log (цена) я вижу цену как неопределенную

Ответы [ 3 ]

1 голос
/ 17 марта 2012

Это потому, что запросы Ajax асинхронны - ваша функция обратного вызова не будет вызываться немедленно. Вот как это происходит:

var price; // = undefined;
Ext.Ajax.request();
// The request is sent and the function immediately returns
console.log(price); // undefined
...
some time passes
...
// Finally the request finishes and your callback function is called;
price = Ext.util.JSON.decode(r.responseText).price;
console.log(price); // some new value

Итак, вы получаете переменную цены после вызова ajax.

1 голос
/ 13 июля 2013

эта работа

fetchRow:function(params){
    var me = this;
    var v;
    this.fetchRowRequest(params,function(value){
        v = value;
    });
    return v;
}
fetchRowRequest: function(params,callback){
    var me = this;
    var record;
    Ext.Ajax.request({
        url: me.proxy.api.read,
        params: {filters:Ext.encode(params)},
        async:false,
        success: function(response){
             var response = Ext.decode(response.responseText);
             var row = response.rows[0];
             if(row){
                var record = Ext.create(me.model.prototype.modelName);
                record.set(row); 
             }else{
                record = false;
             }
             callback(record);
        }
    });
}
0 голосов
/ 16 марта 2012

Как видите, переменной "price" присваивается значение внутри функции "cb", поэтому цена доступна только внутри cb. Вы должны использовать this.price = "bla bla", чтобы цена была доступна и изменялась глобально внутри вашего класс / пространство имен.

Тогда вы должны использовать console.log (this.price); вывести цену.

...