Javascript:拦截所有AJAX调用,重点处理服务器异常
2013-08-08 09:06
555 查看
背景
上篇文章/article/4736921.html介绍了如何以AOP的形式处理服务器异常,这让服务器端的编程逻辑变的非常整洁,本文介绍如何在客户端统一处理服务器返回的异常信息。一点考虑
上篇隐藏了一些概念,即:开发或架构之处,就应当确定哪些异常要返回给UI、哪些异常要写入日志、哪些异常要包装以后返回给UI等等。AJAX拦截
如何拦截AJAX,不外乎这三种方式:注册全局监听函数。
封装一个全局入口。
重写或覆盖客户端库的AJAX功能(Javascript是动态语言,可以运行时替换任何东西)。
最简单的莫过于第一种方式,让我们看一下代码:
拦截事件
/// <reference path="/ext/ext-all-debug-w-comments.js" /> Ext.define('Tenoner.AjaxMonitor', { singleton: true, requires: ['Ext.Ajax'], errorHandlers: [], constructor: function () { var me = this; Ext.Ajax.timeout = 120000; Ext.Ajax.on('requestcomplete', function (connection, response, option) { me.processError(response); }); me.callParent(arguments); }, addErrorHandler: function (errorHandler) { var me = this; me.errorHandlers.push(errorHandler); }, processError: function (response) { var me = this; var result = Ext.decode(response.responseText); if (!result || !result.errorCode) { return; } Ext.Array.each(me.errorHandlers, function (errorHandler) { Ext.Object.each(errorHandler, function (errorCode, handler) { if (errorCode == result.errorCode) { handler(); } }); }); } });
注册一个异常拦截方法
Tenoner.AjaxMonitor.addErrorHandler({ 'CM001': function () { var current = window; while (current != current.parent) { current = current.parent; } current.location.href = '/Login.htm'; } });
我们还能做哪些?
如果希望自动弹出错误提示,也可以以这种形式处理,这样Javascript代码中也尽可能的是正常的代码。
备注
本文以ExtJs为例,不过思路应当适合所有AJAX框架。相关文章推荐
- 拦截所有AJAX调用,重点处理服务器异常
- 扩展jQuery的方法统一处理AJAX调用过程中产生的异常错误信息
- 关于vfp调用连接服务器(linkServer)异常的处理方法
- javascript异常:”automation服务器不能创建对象“ 处理
- struts拦截器拦截ajax异步调用异常问题 (二)
- Javascript 直接调用服务器C#代码 ASP.NET Ajax实例
- [置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- javascript调用多个参数的方法,参数在ajax中传送给后台并获取,某个为空处理
- Ajax程序:处理异步调用中的异常(在客户端调用Web Service代理时发生异常的处理办法)
- 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分
- ASP.net AJAX 调用PageMethods实例(javascript调用服务器页面方法)
- java异常处理,ajax调用后台异常,页面跳转
- ajax调用服务器方法,Sesstion过期的处理方法
- Javascript 直接调用服务器C#代码 ASP.NET Ajax实例
- ASP.net AJAX 调用PageMethods实例(javascript调用服务器页面方法)
- ASP.NET Ajax实例—Javascript直接调用服务器C#代码
- ASP.NET Ajax实例—Javascript直接调用服务器C#代码
- Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- ASP.net AJAX 调用PageMethods实例(javascript调用服务器页面方法)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(2):处理异步调用中的异常