您现在的位置: 365建站网 > 365文章 > 扩展JQuery Ajax请求错误机制,实现服务器端消息回馈。

扩展JQuery Ajax请求错误机制,实现服务器端消息回馈。

文章来源:365jz.com     点击数:310    更新时间:2009-09-12 14:58   参与评论

JQuery使我们在开发Ajax应用程序的时候提高了效率,减少了许多兼容性问题,但时间久了,也让我们离不开他。比如简单的Jquery Ajax请求的封装让我们忘却了最原始的XmlHttpRequest对象和他的属性,方法,也让我们远离事情的真相。

在Ajax项目中,经常遇到需要服务器端返回错误的消息提示,或者消息码之类的数据。查过一些帮助,解决方案,很多网站是返回错误的消息JSON数据或者脚本,这种方式当我们用JQuery.ajax()的时候出现了问题,jquery.ajax()回调函数success(data)的data参数可能是 xmlDoc, jsonObj, html, text, 等等...这取决于我们dataType设置和MIME.很多时候我们的错误处理都是统一的处理,不管你请求的是XML,JSON...。不光不好统一,还容易出现解析错误等等情况。

参考了Prototyp框架的做法,做了一个Jquery的错误扩展。

原理:Prototype思路是把服务器处理结果状态信息写在Header里面,这种方式既保证了reponse body的干净,同时适应XML,JSON,HTML,Text的返回情况。

   服务器端只需要 Response.AddHeader("Error-Json""{code:2001,msg:'User settings is null!',script:''}");

实现:为了不影响原有的Jquery.ajax方法,同时不破坏jquery库源文件,做了如下扩展,代码很简单都能看懂:

;(function($){
    
var ajax=$.ajax;
    $.ajax
=function(s){
        
var old=s.error;
        
var errHeader=s.errorHeader||"Error-Json";
        s.error
=function(xhr,status,err){
            
var errMsg = window["eval"]("(" + xhr.getResponseHeader(errHeader) + ")");
            old(xhr,status,errMsg
||err);
        }

        ajax(s);
    }

})(jQuery);

 

使用方法:

  服务器端:我们是对错误进行扩展,如果要让jquery.ajax破获错误,必须要服务器端返回非200的错误码,由于Opera浏览器下面对400以上的错误码,都无法获得请求的Header,建议如果要支持Opera,最好返回30*错误,这是Opera能接受Header的错误范围。没有做包装,可以再单独把Catch内容出来。

try {
                context.Response.Write(GetJson(context));
                
throw new Exception("msg");
            }

            
catch {
                context.Response.ClearContent();
                context.Response.StatusCode 
= 300;
                context.Response.AddHeader(
"Error-Json""{code:2001,msg:'User settings is null!',script:''}");
                context.Response.End();
            }


  客户端:

  

$.ajax({
            url: 
this.ajaxUrl,
            type: 
"POST",
            success: callback,
            error: 
function(xhr,status,errMsg){
        alert(errMsg.code
+"<br/>"+errMsg.msg);
            }

        }
);

也许不是最好的,但觉得用起来很方便,忘了个写新增参数errorHeader:"Error-Json",这个header头key根据你后台设定配置。

Tag标签: 扩展JQuery Exception

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (310人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 建站公司
· 杰创官网
· 建站工具

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2022 版权所有 鄂ICP备17013400号