您的位置:首页 > Web前端 > JavaScript

【翻译】Ext JS 4――Ajax和Rest代理处理服务器端一场和消息的方法

2014-06-02 14:56 369 查看
原文:EXTJS4 - Handle Server-side exceptions and message from an Ajax or Rest proxy

作者:Raja

可能要处理的情况:
success(成功)――Ext处理
failure(失败),由于通讯问题――Ext处理
failure(失败),由于服务器端异常――开发人员人员必须处理的响应失败……

解决方案一:
在应用程序控制器中编写以下方法:
//Ajax Response Error Handler                  Ext.Ajax.on('requestexception', function(conn,response, options, eOpts) {                         var error = response.status + ' - ' +response.statusText;                         console.log('Ajax Request Exception! '+error);                         if (response.status != 200) {var errorData =Ext.JSON.decode(response.responseText);  console.log('ajaxreq error:'+errorData.message);                      console.log('Ajax request Error',response.status);                           }                  });


解决方案二:
当在服务器端发生异常时,可以将500作为响应标头,原因作为HTML内容发送回客户端。
store.on('loadexception',
function(a,conn,resp) {
if (resp.status == '304') {
Ext.Msg.alert('Content has not changed');
}else if(resp.status == '200') {
return; //Do nothing
}else if (resp.status == '401') {
Ext.Msg.alert('Authentication required - You need
to Login');
}else if (resp.status == '302') {
errorDialog.body.update('Session Has Expired');
errorDialog.show();
}else if(resp.status == '500') {
errorDialog.body.update(resp.responseText);
errorDialog.show();
}else{
errorDialog.body.update('An uncaught exception has
occured');
errorDialog.show();
}
}


解决方案三:
当发送Ajax或REST请求时,Ext JS 4代理通常会预期返回的信息包括参数:data、success和message。参数message是可选的,不过当需要将请求结果显示给用户的时候,它就可派上用场了。

function requestMessageProcessor(proxy,response) {         if(response && proxy) {                                     try{                                                                         varresponseData = proxy.reader.getResponseData(response);                                                    if(responseData.message) {                                   varmessageDescription = 'Information'; // title of the alert box                                   varmessageIcon = Ext.MessageBox.INFO;                                                                      if(!responseData.success)                                   {                                            varmessageDescription = 'Error';                                            varmessageIcon = Ext.MessageBox.ERROR;                                   }                                                                      Ext.MessageBox.show({                                            title:messageDescription,                                            msg:responseData.message,                                            buttons:Ext.MessageBox.OK,                                            icon:messageIcon                                   });                          }                 }                 catch(err){                          //Malformed response most likely                          console.log(err);                 }         }}And here’s the part which should reside in proxy:
proxy: { ... listeners: {   exception: function(proxy, response, options) {   requestMessageProcessor(proxy, response);  } }, afterRequest: function(request, success) {  requestMessageProcessor(request.scope, request.operation.response); }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐