2012-03-16 66 views
0

如何設置Ajax調用後的「價格」可變後設置變量? 這裏的代碼:ExtJS的: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(價格)我看到的價格是不確定的

回答

-1

正如你可以看到,「價格」變量分配裏面的「CB」功能,因此價格的值只能訪問內部cb.You必須使用this.price =「喇嘛喇嘛」,因此價格將可以和你的類/命名空間裏全球範圍內修改。

然後你必須使用console.log(this.price);輸出的價格。

+2

不是。在'price'變量被定義外'cb'功能,並且所有圍繞給定的代碼段完全訪問。 – 2012-03-16 21:21:29

+1

謝謝指正劉若英。 – 2012-03-17 17:10:55

+0

我試過drfanai更正this.price,它不工作... – 2012-03-19 09:49:16

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調用完成。

+0

在我的代碼中,我得到的回調函數內的變量內容...我想回調函數將被調用後的Ajax響應...你怎麼看待這件事? – 2012-03-19 09:08:36

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