如何在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(价格)中,我将价格视为未定义
答案 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);输出价格。