2018年1月30日 星期二

for Extjs4 ,store + ajax proxy,如何在「load」事件中讀取records之外其他傳回來的json值

例, 某個store物件是長這樣的
===============================
  var store=bew Ext.data.JsonStore(
    ...
    ...
    proxy:{
      type:'ajax',
      url: .....
   }
);
  store.load({
      scope:this,
     callback:function(records,option,success){
            ...
            ...
         if(success){
                .....產生grid.....
        }
     }
  });
===============================
server side:
==================
傳回一個json,

  var jason={
      success=....,
      totalCount=....
      rows=......
      msg=...... <---如果有錯誤發生的話
 }
==================
如果是success還好,直接做grid產生的動作
可是人生不如意,十之三四五六七八九,多少會有success=false的時候
可是如果是failed的話,要怎麼接收ms的消息?明明callback 只有三個參數啊
有的人是說用這方式來接收server response的json物件....
=========================
callback: function(records, operation, success) {  

 var jsonStr = Ext.JSON.decode(operation.response.responseText);  

 alert(jsonStr.message); 

}

=======================
很不幸的,上述的程式碼是行不通的(上述的作法應該是3.x的吧?)
會出現 operation.response=null的現象

如何是好?真正的做法是:


=======================

 if (!success) {

            var jsonObj =store.proxy.reader.rawData; 

            Ext.Msg.alert('Server Failed!!', jsonObj.msg,Ext.emptyFn);                                    

           return; 

 }else{ 

   ....產生grid.....

 }

=======================

注意,store.proxy.reader.rawData」已經是json物件了,不是text,不要再自做聰明去用Ext.JSON.decode...了,否則會出現You're trying to decode an invalid JSON String: [object Object]」這樣的訊息,請小心
以上,大家加油了


參考來源