当前位置: 首页 > news >正文

分享: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;
    }
}

转载于:https://www.cnblogs.com/vincent-lwx/archive/2008/08/19/1270998.html

相关文章:

  • 洛谷P1287 盒子与球 数学
  • 识别地图上的地名-- 笔记一
  • 如何破解来自私有云的安全挑战
  • SQL优化34条[转载]
  • 你的每行代码值多少钱?
  • 日常开发工作快照(一)
  • Catalog Service - 解析微软微服务架构eShopOnContainers(三)
  • 2008-08-23
  • MIEngine —— Visual Studio 调试引擎
  • 目录比较的小工具myfc
  • Hessian--轻量级远程调用方案
  • 大整数乘法-表格法
  • 2.2《框架通讯契约——接口》
  • 【重要更新】强大的文档管理工具包Aspose.Total 2017年中更新大合集
  • VC、IE、ASP环境下打印、预备的完美解决方式
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • conda常用的命令
  • ES6 ...操作符
  • Java多线程(4):使用线程池执行定时任务
  • java正则表式的使用
  • js
  • Python学习笔记 字符串拼接
  • SQLServer插入数据
  • 简析gRPC client 连接管理
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端知识点整理(待续)
  • 如何编写一个可升级的智能合约
  • 如何利用MongoDB打造TOP榜小程序
  • linux 淘宝开源监控工具tsar
  • MyCAT水平分库
  • puppet连载22:define用法
  • Semaphore
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • # Java NIO(一)FileChannel
  • (待修改)PyG安装步骤
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • *Django中的Ajax 纯js的书写样式1
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • @Async注解的坑,小心
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @JsonSerialize注解的使用
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [.net]官方水晶报表的使用以演示下载
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [2023-年度总结]凡是过往,皆为序章
  • [AAuto]给百宝箱增加娱乐功能
  • [Android]使用Git将项目提交到GitHub
  • [C#]winform部署PaddleOCRV3推理模型
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [c语言]小课堂 day2
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能