2011-03-30 103 views
1

我有以下的ExtJS。當響應成功時(響應是JSON,如:{「success」:true,「message」:「......」}),調用監聽器「write」。但是,如果回覆不成功,我該如何附加回調? ({ 「成功」:假的, 「消息」: 「......」})Ext.data.HttpProxy回調失敗

tableStructure.proxy = new Ext.data.HttpProxy({ 
     api: { 
      read: '/controller/tables/' + screenName + '/getstructure/' + table, 
      create: '/controller/tables/' + screenName + '/createcolumn/' + table, 
      update: '/controller/tables/' + screenName + '/updatecolumn/' + table, 
      destroy: '/controller/tables/' + screenName + '/destroycolumn/' + table 
     }, 

     listeners: { 
      write: tableStructure.onWrite 
     } 
    }); 

回答

4

你想趕上HTTPPROXY的exception事件。

listeners: { 
     write: tableStructure.onWrite 
     exception: function(proxy, type, action, options, response, arg) { 
      if(type === 'remote') { // success is false 
       // do your error handling here 
       console.log(response); // the response object sent from the server 
      } 
     } 
    } 

你可以找到在內線文檔完整的文檔爲Ext.data.HttpProxy在事件部分下降。

0

您應該能夠利用write事件本身。寫事件的簽名是: write(dataproxy,action,data,response,record,options)

您可以從操作對象訪問成功變量並檢查值是true還是false。您應該能夠訪問成功變量:

action.result.success 

你可以這樣做:

if(action.result.success != true) { 
    // If success is not true 
} else { 
    // If success is true 
} 
+0

我已經試過了(似乎是顯而易見的)。但是,當成功時,回調不會被解僱 – 2011-03-30 19:26:25

0

您也可以在Ext.data.Store包裹HttpProxy設置exception handler,只要您發送以外的響應碼比200

var store = new CQ.Ext.data.Store({ 
     proxy : new CQ.Ext.data.HttpProxy({ 
      method : "GET", 
      url : '/some_url' 
     }), 
     reader : new CQ.Ext.data.JsonReader(), 
     baseParams : { 
      param : 'some value' 
     } 
    }); 

    store.on("beforeload", function() { 
     CQ.Ext.getBody().mask("Please wait...", false); 
    }); 

    store.on("exception", function() { 
     CQ.Ext.getBody().unmask(); 
     CQ.Ext.Msg.show({ 
      title: 'Error', 
      msg: '<span style="color:red">Bad request.</span><br/>', 
      icon: CQ.Ext.Msg.ERROR, 
      buttons: CQ.Ext.Msg.OK 
     }); 
    });