分享:Ajax工具文件

 

 

版权所有:刺桐红-技术工作室   蓝文雄

声明:分享类型的文章均为我们工作室为了项目需求封装的工具类,本着分享合作的信念,其中如有错误,欢迎来信交流

lwx707@hotmail.com  2008-08-21

 

 

//Ajax请求文件

//针对不同浏览器的XMLHttpRequest对象数组
factories = [
                function(){return new XMLHttpRequest();},
                function(){return new ActiveXObject("Msxml2.XMLHTTP");},
                function(){return new ActiveXObject("Microsoft.XMLHTTP");}
            ];   
       
///创建XMLHttpRequest
///成功返回对象,失败抛出异常
function newRequest()
{  
    for(var i=0;i<factories.length;i++){
        try{
         var factory=factories[i];
         var request=factory();
         if(request!=null){
          return request; 
         }
        }
        catch(e){
         throw new Error("创建XMLHttpRequest对象发生异常:"+e);
        }
    }
}

///发送get请求
///url:请求目的地及其传递参数("/ashx/user.ashx?id=1&userName='+userName")
///callback:请求成功回调函数,接受两个参数model,other(可选)
///errorHandler:请求异常处理函数,接受两个参数request.status,request.statusText
///other:可选项,配合callback为了扩展,例如国家列表的获取使用这个参数传递鼠标位置pos
function get_request(url,callback,errorHandler,other)
{    
    var request=newRequest();
    request.onreadystatechange=function()
    {
        if(request.readyState==4)
        {
            if(request.status==200)
            {
                callback(get_response(request),other);  //请求正常
            }
            else
            {
                if(errorHandler)  errorHandler(request.status,request.statusText);  //请求异常
                else  callback(null);
            }
        }
    }
    request.open("GET",url);
    request.send(null);
}

///发送post请求
///url:请求目的地
///callback:请求成功回调函数,接受两个参数:服务器数据,other(可选)
///values:请求体参数,格式:"id=1&userName"+userName;
///errorHandler:异常处理函数,接受两个参数request.status,request.statusText;
///other:可选项,配合callback为了扩展,例如国家列表的获取使用这个参数传递鼠标位置pos
function post_request(url,callback,values,errorHandler,other)
{
    var request=newRequest();
    request.onreadystatechange=function()
    {
        if(request.readyState==4)
        {
            if(request.status==200)
            {
                callback(get_response(request),other);  //请求正常
            }
            else
            {
                if(errorHandler)  errorHandler(request.status,request.statusText);  //请求异常
                else  callback(null);
            }
        }
    }
    request.open("POST",url);  
    //指定请求格式,并且设置请求头部信息
    request.setRequestHeader("Content-Length",values.length);   
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.send(values); 
};

///发送head请求,这个请求项目中除非特殊情况基本不会用到
///url:请求目的地
///callback:请求成功回调函数,接受两个参数:服务器数据
///errorHandler:可选项,异常处理函数,接受两个参数request.status,request.statusText,如果未指定 callback(null);
function head_request(url,callback,errorHandler)
{
    var request=newRequest();
    request.onreadystatechange=function()
    {
        if(request.readyState==4)
        {
            if(request.status==200)
            {
                callback(parseHeaders(request));  //请求正常,parseHeaders函数托管响应
            }
        }
        else
        {
            if(errorHandler) errorHandler(request.status,request.statusText);  //请求异常
            else callback(null);
        }   
    }
    request.open("HEAD",url);
    request.send(null);
};


///解析请求头部信息,未经过解析,因为是在发送head请求用到
function parseHeaders(request)
{
    var headerText=request.getAllResponseHeaders();  //获取头部键值数组
    var headers={};  //返回值
    var ls=/^\s*/;  //正则表达式
    var ts=/\s*$/;

    var lines=headerText.split("\n");
    for(var i=0;i<lines.length;i++)
    {
        var line=lines[i];
        if(line.length==0) continue;  //忽略空行,否则开始解析
        var pos=line.indexOf(':');
        var name=line.substring(0,pos).replace(ls,"").replace(ts,"");
        var value=line.substring(0,pos+1).replace(ls,"").replace(ts,"");
        headers[name]=value;  //填充返回值
    }
    return headers;
};


/// 解析服务器数据格式
/*       
    1、request.responseText,默认文本形式解析;
    2、request.responseXML,xml形式解析
    3、eval(request.responseText),JavaScript(json)形式解析,安全性问题
*/
function get_response(request)
{
    switch(request.getResponseHeader("Content-Type"))
    {
        case "text/xml":
            return request.responseXML;
        case "text/json":
        case "text/javascript":
        case "application/javascript":
        case "application/x-javascript":
            return eval(request.responseText);
        default:
            return request.responseText;
    }
}

posted @ 2008-08-19 11:32  蓝色乌托邦  阅读(213)  评论(0编辑  收藏  举报