Extjs:在ajax请求后设置变量

时间:2012-03-16 16:24:33

标签: ajax extjs

如何在ajax调用后设置“price”变量? 这里是代码:

                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 个答案:

答案 0 :(得分:1)

因为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 :(得分:1)

这项工作

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);
        }
    });
}

答案 2 :(得分:-1)

正如您所看到的,“价格”变量在“cb”函数内被赋值,因此价格只能在cb内部访问。您必须使用this.price =“bla bla”所以价格将可用且可在全局范围内修改类/命名空间。

然后你必须使用console.log(this.price);输出价格。