背景

上篇文章http://www.cnblogs.com/happyframework/p/3241063.html介绍了如何以AOP的形式处理服务器异常,这让服务器端的编程逻辑变的非常整洁,本文介绍如何在客户端统一处理服务器返回的异常信息。

一点考虑

上篇隐藏了一些概念,即:开发或架构之处,就应当确定哪些异常要返回给UI、哪些异常要写入日志、哪些异常要包装以后返回给UI等等。

AJAX拦截

如何拦截AJAX,不外乎这三种方式:

  1. 注册全局监听函数。
  2. 封装一个全局入口。
  3. 重写或覆盖客户端库的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 = ; 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框架。

Javascript:拦截所有AJAX调用,重点处理服务器异常的更多相关文章

  1. 拦截所有AJAX调用,重点处理服务器异常

    拦截所有AJAX调用,重点处理服务器异常 背景 上篇文章http://www.cnblogs.com/happyframework/p/3241063.html介绍了如何以AOP的形式处理服务器异常, ...

  2. Ajax--Ajax基于原生javascript:创建Ajax对象、链接服务器、发送请求、接受响应结果

    Ajax概述 异步:指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 同步请求: 请求是由浏览器发送 页面会刷新 异步请求: 请求是由浏览器的一 ...

  3. javascript 写一个ajax 自动拦截,并下载数据

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  4. 使用 JavaScript 拦截和跟踪浏览器中的 HTTP 请求

    HTTP 请求的拦截技术可以广泛地应用在反向代理.拦截 Ajax 通信.网页的在线翻译.网站改版重构等方面.而拦截根据位置可以分为服务器端和客户端两大类,客户端拦截借助 JavaScript 脚本技术 ...

  5. Jquery Ajax调用aspx页面方法

    Jquery Ajax调用aspx页面方法 在asp.net webform开发中,用jQuery ajax传值一般有几种玩法 1)普通玩法:通过一般处理程序ashx进行处理: 2)高级玩法:通过as ...

  6. 使用JQuery的Ajax调用SOAP-XML Web Services(Call SOAP-XML Web Services With jQuery Ajax)(译+摘录)

    假设有一个基于.Net的Web Service,其名称为SaveProduct POST /ProductService.asmx HTTP/1.1 Host: localhost Content-T ...

  7. javascript进阶之AJAX

    AJAX 一 AJAX预备知识:json进阶 1.1 什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javas ...

  8. jquery.ajax请求aspx和ashx的异同 Jquery Ajax调用aspx页面方法

    1.jquery.ajax请求aspx 请求aspx的静态方法要注意一下问题: (1)aspx的后台方法必须静态,而且添加webmethod特性 (2)在ajax方法中contentType必须是“a ...

  9. 【温故而知新-Javascript】使用 Ajax

    Ajax 是现代Web 应用程序开发的一项关键工具.它让你能向服务器异步发送和接收数据,然后用 Javascript 解析. Ajax 是 Asynchronous JavaScript and XM ...

随机推荐

  1. es 插件

    类 若 实现NativeScriptFactory接口.A factory to create instances of either {@link ExecutableScript} or {@li ...

  2. PHP下利用PHPMailer

    PHPMailer有什么优点? 可运行在任何平台之上 支持SMTP验证 发送邮时指定多个收件人,抄送地址,暗送地址和回复地址:注:添加抄送.暗送仅win平台下smtp方式支持 支持多种邮件编码包括:8 ...

  3. jquery li a 样式

    jQuery(".CwebtopNavContainer").find("li:last a").css("color","red ...

  4. IEEEXtreme 10.0 - Ellipse Art

    这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Ellipse Art 题目来源 第10届IEEE极限编程大赛 https://www.hackerrank ...

  5. git与pycharm合并,珠联璧合

    前段时间提交代码都是各种手写push push push,好蠢,今天尝试了一下ide直接提交,爽的一匹,做个总结. 首先github帐号肯定要有. 看图,设置好帐号啥的 再设置git路径,这个应该自动 ...

  6. bzoj 1113

    思路:对于两张高度一样的海报 i, j, 即 y[ i ] = y[ j ], 如果对于任意i < k < j 有y[ k ] > y[ i ] && y[ k ] ...

  7. php实现var_dump函数

    <?php class VarDump { private static $isInLoop = false; private static $buffer = false; public st ...

  8. java 错误:无法找到或装入主类

    1. 删除找不到的jar 2. 删除src以外的文件夹

  9. PHP代码重用

    代码重用 include() 和require() 都是载入文件 include()如果载入的文件不存在,提示警告错误,程序还可以继续执行 require()如果载入的文件不存在,致命性错误,程序终止 ...

  10. BZOJ1226 SDOI2009学校食堂

    这题状压DP太神了. g[i][j][k]表示前i-1个人都已打到饭,自己和后七个人打饭的情况是j,当前最后一个打饭的与i的关系是k 如果j&1==1说明当前这个人也打了饭,那么可以转移到g[ ...