统一处理jquery ajax请求过程中的异常错误信息的机制
当jQuery ajax向服务器发送请求,服务器发生异常,比如:400、403、404、500等异常,服务器将异常响应给客户端,此时的ajax可以获取异常信息并进行处理,但此时我们一般是跳转到与异常编码对应的异常页面,对异常集中展现与处理。
首先,发送ajax请求: 
$.ajax({ 
type: ‘POST’, 
url: url, 
data: data, 
success: success, 
dataType: dataType 
});
然后,服务发生异常,将对应的异常编码响应给客户端: 
response.sendError(404); 
return false;
最后,将对异常的处理代码作为公共资源引入各个页面,实现统一展现、处理异常的功能,使用jquery的ajaxError事件:
事件说明:
事件使用代码:
$(function(){
            //.ajaxError事件定位到document对象,文档内所有元素发生ajax请求异常,都将冒泡到document对象的ajaxError事件执行处理,ajax方法中有error,先处理error,再冒泡到此处的error
            $(document).ajaxError(
                    //所有ajax请求异常的统一处理函数,处理
                    function(event,xhr,options,exc ){
                        if(xhr.status == 'undefined'){
                            return;
                        }
                        switch(xhr.status){
                            case 403:
                                // 未授权异常
                                alert("系统拒绝:您没有访问权限。");
                                break;
                            case 404:
                                alert("您访问的资源不存在。");
                                break;
                        }
                    }
            );
        });
或者定义全局ajaxerror方法:(如果页面ajax请求中,有error的处理方法,此处不执行)
$(function () {
    $.ajaxSetup({
        error:function(request){
            if (!request || request.status == 0)
                return;
            if (request.status == 318) { //
                var inReload = request.getResponseHeader('in-reload');
                if (inReload == 1) {
                    var check = confirm("此次会话已超时,点击'确定',重新登录");
                    if(check) {
                        top.location.href = decodeURI(top.location.href.split(';')[0]);
                    }
                    return;
                }
            }
        },
        complete: function (request, status) {
            try {
                var inFefresh = request.getResponseHeader('is-refresh');
                var inLogin = request.getResponseHeader('in-login');
                var refreshUrl = request.getResponseHeader('refresh-url');
                if (inFefresh == '1' || inLogin == '1') {
                    if (refreshUrl == null || refreshUrl == '') {
                        window.location.reload();
                    } else {
                        try {
                            refreshUrl = decodeURI(refreshUrl);
                            top.location.href = refreshUrl;
                        } catch (e) {
                            window.location.reload();
                        }
                    }
                }
            } catch (e) {
                //后台没有设置responseHeader则不做处理
            }
        }
    });
});
 对于非ajax请求异常,直接交给web.xml来处理:
<!-- Error page -->
<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/WEB-INF/views/error/500.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/views/error/500.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/views/error/404.jsp</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>/WEB-INF/views/error/403.jsp</location>
</error-page>
<error-page>
    <error-code>400</error-code>
    <location>/WEB-INF/views/error/400.jsp</location>
</error-page>统一处理jquery ajax请求过程中的异常错误信息的机制的更多相关文章
- springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。
		springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 1.1 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeEx ... 
- Ajax请求过程中显示“进度”的简单实现
		Ajax在Web应用中使用得越来越频繁.在进行Ajax调用过程中一般都具有这样的做法:显示一个GIF图片动画表明后台正在工作,同时阻止用户操作本页面(比如Ajax请求通过某个按钮触发,用户不能频繁点击 ... 
- [JQuery] Ajax使用过程中的问题总结
		JQuery提供的ajax函数,在使用过程中,因为对参数的不了解,导致了很多错误,现在总结如下,以便时常温固,不犯同样的错误. 1.我在项目中使用到的ajax请求格式如下: $.ajax({ url: ... 
- UI5-技术篇-jQuery.ajax执行过程中Token验证及JSON格式传值问题
		最近两天在测试OData服务类方法CREATE_DEEP_ENTITY及GET_EXPANDED_ENTITYSET,刚开始采用ODataModel方式调用没有任何问题,但是ODataModel采用的 ... 
- ajax请求过程中下载文件在火狐下的兼容问题
		项目中碰到的问题,记录如下. 需求很简单,点击一个文件链接下载该文件,同时向后台发送请求.需求很常见,用户点击下载后通常要进行下载量的统计,统计的话可以利用 script标签 或者 img标签(图片p ... 
- allegro导入网表过程中出现的错误信息
		1. 找不到焊盘PAD,下面这句话的意思是器件封装找不到焊盘46.pad WARNING(SPMHNI-): Unable to load symbol ): Could not find padst ... 
- 想抛就抛:Application_Error中统一处理ajax请求执行中抛出的异常
		女朋友不是想抛就抛,但异常却可以,不信请往下看. 今天在MVC Controller中写代码时,纠结了一下: public async Task<ActionResult> Save(in ... 
- zepto源码研究 - ajax.js(请求过程中的各个事件分析)
		简要:ajax请求具有能够触发各类事件的功能,包括:触发全局事件,请求发送前事件,请求开始事件,请求结束事件等等,贯穿整个ajax请求过程,这是非常有用的,我们可以利用这些事件来做一些非常有意思的事情 ... 
- ajax用beforeSend自定义请求过程中客户端事件,提高用户体验
		本文为博主原创,未经允许不得转载: 在应用ajax的过程中,当我们再前台提交请求的时候,如果服务端响应事件比较长,就会导致需要等很长时间在前台才能接受到服务端返回的 响应结果,往往会导致用户重复点击按 ... 
随机推荐
- POJ  3691  DNA repair (DP+AC自动机)
			DNA repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4815 Accepted: 2237 Descri ... 
- 浅析若干Java序列化工具【转】
			在Java中socket传输数据时,数据类型往往比较难选择.可能要考虑带宽.跨语言.版本的兼容等问题.比较常见的做法有: 采用java对象的序列化和反序列化 把对象包装成JSON字符串传输 Googl ... 
- 使用Xcode 查看objective-C的汇编代码
			Xcode自带将某一个源文件转化成汇编的功能.如图: 汇编的部分代码例如以下: # Assembly output for assemble.c # Generated at 2:29:34 下午 o ... 
- POJ 3254 简单状压DP
			没什么可说的,入门级状压DP.直接撸掉 #include <iostream> #include <cstring> #include <cstdlib> #inc ... 
- 推荐系统学习07-Waffles
			介绍 Waffles 英文原意是蜂蜜甜饼,在这里却指代一个很强大的机器学习的开源工具包. Waffles里包括的算法特别多.涉及机器学习的方方面面,推荐系统位于当中的Waffles_recommend ... 
- 取出分组后每组的第一条记录(不用group by)按时间排序
			--操作日志表 CREATE TABLE [dbo].[JobLog]( [JobLogId] [int] IDENTITY(1,1) NOT NULL, [FunctionId] [nvarchar ... 
- Android开发5——文件读写
			一.基本概念 在Android应用中保存文件,保存的位置有两处 ①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录 ② ... 
- Hadoop2.x介绍与源代码编译
			1.Hadoop 项目的四大模块 Hadoop Common: The common utilities that support the other Hadoop modules. Hadoop D ... 
- Gcc\MingW\Cygwin\Msys简介
			一.GCC的历史GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的移植版本.所以,也许对于许多Windows开发者来说,GCC还是一个比较陌生的东西.所 ... 
- Diamond 3.5简易教程(二)------软件的简单使用
			二.软件的简单使用 工程建立后我们就可以进行程序的编写添加了. 选择左下角file list 选项卡 这里主要是工程的信息. 在input files 上右键弹出选项addànew file... 在 ... 
