文档章节

原生态ajax写法 转载

B
 BACKDEV
发布于 2016/06/24 09:29
字数 1480
阅读 58
收藏 1

转载于:http://my.xueh5.com/mattsi/detail-3622.html

这是我见过写的最好的原生态写法,里面注释清晰,思路清晰,希望对大家有用

function zyajax(){}
zyajax.version="1.1";
zyajax.async=true;
zyajax.httpMethod="POST";
zyajax.responseType="xml";
zyajax.url="";
zyajax.debug=false;
zyajax.getXmlHttpObj = function()
{
    if(typeof XMLHttpRequest != "undefined")
    {
    return new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
    var aVersion =["MSXML2.XMLHttp.5.0",
    "MSXML2.XMLHttp.4.0",
    "MSXML2.XMLHttp.3.0",
    "MSXML2.XMLHttp",
    "Microsoft.XMLHttp"];
    for(var i=0;i<aVersion.length;i++)
    {
    try
    {
    var oXmlHttp = new ActiveXObject(aVersion[i]);
    return oXmlHttp;
    }
    catch(e)
    {
    }
    }
    }
    throw new Error("XMLHttp object can't be create!");
};
//
//  使用XMLHTTP和远程服务器通信。
//
//  参数名称        必须    类型        取值范围            描述
//-------------------------------------------------------------------------------------------
//async是      boolean     true/false          是否使用异步方式
//httpMethod是      string      "post"/"get"        http方法
//responseType否      string      "text"/"xml"        返回数据的类型
//url是      string                          接收请求的URL地址
//callback否      function                        异步方式操作完成时执行的回调函数
//postData否      string                          post方式时发送的数据
//
//  注:非必须的参数,如不被传递时使用null代替。
//zyajax.transmit = function(async, httpMethod, responseType, url, callback, postData)
//------------------------
//使用XMLHTTP和远程服务器通信。
//
//  参数名称        必须    类型        取值范围            描述
//-------------------------------------------------------------------------------------------
//qwzyCommond是      string      PHP端执行函数名          
//postData是      string      参数       JSON格式:{parameters:["param1","param2","param3"]}
//async否      boolean     true/false        是否使用异步方式
//callback是      string      回调函数                    
//------------------------
zyajax.call = function(qwzyCommond,postData,async,callback)
{
    var httpMethod=zyajax.httpMethod;
    var responseType=zyajax.responseType;
    var url=zyajax.url;
    var params="";
    objParams=postData["parameters"];
    if(objParams.length!=0){
    for(var a=0;a<objParams.length;a++){
    params+=objParams[a]+"~*zyzajax*~";
    }
    params=params.substring(0,params.length-11)
    }
    params="sbmtData="+encodeURIComponent(params)+"&qwzyCommond="+qwzyCommond;
        httpMethod = httpMethod.toLowerCase();
        if(responseType != null) responseType = responseType.toLowerCase();
        var xmlhttp = this.getXmlHttpObj();
        url=url+"?"+params;
    xmlhttp.open(httpMethod, url, async);
    if(!async && httpMethod == "post")
        xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    if(async)
    {
    xmlhttp.onreadystatechange = function()
    {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        try
        {
            if(typeof(callback) == "function")
            {
                switch(responseType)
                {
                case "xml":
                    var cmdXML=xmlhttp.responseXML;
                    var elements = cmdXML.getElementsByTagName("cmd");
                    var xmlLen=elements.length;
                    var returnValue="";
                    for(var a=0;a<xmlLen;a++){
                    if(elements[a].getAttribute("cmd")=="txt"){
                    returnValue=zyajax.getContent(elements[a]);
                    }else{
                    eval(zyajax.getContent(elements[a]));
                    }
                    }
                    callback(returnValue);
                break;
                    case "json":
                    var jsonData=eval("("+xmlhttp.responseText+")");
                    var jsonLen=jsonData.length;
                    var returnValue="";
                    for(var a=0;a<jsonLen;a++){
                    if(jsonData[a].cmd=="txt"){
                    returnValue=jsonData[a].code;
                    }
                    else{
                    eval(jsonData[a].code);
                    }
                    }
                    callback(returnValue);
                    break;
            default:
                callback(null);
                }
                if(zyajax.debug){
                    alert("请求/响应函数:"+qwzyCommond);
                    alert("服务端返回内容:\n"+xmlhttp.responseText);
                    }
            }
    }
    finally
    {
        xmlhttp = null;
    }
    }
    }
    xmlhttp.send(params);
    }
    else
    {
    var returnValue="";
    xmlhttp.send(params);
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        switch(responseType)
    {
        case "xml":
                    var cmdXML=xmlhttp.responseXML;
                    var elements = cmdXML.getElementsByTagName("cmd");
                    var xmlLen=elements.length;
                     
                    for(var a=0;a<xmlLen;a++){
                    if(elements[a].getAttribute("cmd")=="txt"){
                    returnValue=zyajax.getContent(elements[a]);
                    }else{
                    eval(zyajax.getContent(elements[a]));
                    }
                    }
                    return returnValue;
                break;
                    case "json":
                var jsonData=eval("("+xmlhttp.responseText+")");
                var jsonLen=jsonData.length;
                var returnValue="";
                for(var a=0;a<jsonLen;a++){
                if(jsonData[a].cmd=="txt"){
                returnValue=jsonData[a].code;
                }
                else{
                eval(jsonData[a].code);
                }
                }
                return returnValue;
                break;
        default:
            return null;
    }
        if(zyajax.debug){
            alert("请求/响应函数:"+qwzyCommond);
            alert("服务端返回内容:\n"+xmlhttp.responseText);
            }
    }
    else
    {
        return null;
    }
    }
};
//简洁zyajax请求
zyajax.speedsmit=function (params,commond,callback)
{
    var async=zyajax.async;
    var httpMethod=zyajax.httpMethod;
    var responseType=zyajax.responseType;
    var url=zyajax.url;
    var myMethod=zyajax.myMethod;
    var params="sbmtData="+encodeURIComponent(params)+"&qwzyCommond="+commond;
    var httpMethod = httpMethod.toLowerCase();
        if(responseType != null) responseType = responseType.toLowerCase();
        var xmlhttp = this.getXmlHttpObj();
        url=url+"?"+params;
    xmlhttp.open(httpMethod, url, async);
    if(!async && httpMethod == "post")
        xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    if(async)
    {
    xmlhttp.onreadystatechange = function()
    {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        try
        {
            if(typeof(callback) == "function")
            {
                switch(responseType)
                {
                    case "xml":
                     
                    var cmdXML=xmlhttp.responseXML;
                     
                    var elements = cmdXML.getElementsByTagName("cmd");
                    var xmlLen=elements.length;
                    var returnValue="";
                    for(var a=0;a<xmlLen;a++){
                    if(elements[a].getAttribute("cmd")=="txt"){
                    returnValue=zyajax.getContent(elements[a]);
                    }else{
                    eval(zyajax.getContent(elements[a]));
                    }
                    }
                    callback(returnValue);
                break;
                    case "json":
                    var jsonData=eval("("+xmlhttp.responseText+")");
                    var jsonLen=jsonData.length;
                    var returnValue="";
                    for(var a=0;a<jsonLen;a++){
                    if(jsonData[a].cmd=="txt"){
                    returnValue=jsonData[a].code;
                    }
                    else{
                    eval(jsonData[a].code);
                    }
                    }
                    callback(returnValue);
                    break;
            default:
                callback(null);
                }
                if(zyajax.debug){
                    alert("请求/响应函数:"+commond);
                    alert("服务端返回内容:\n"+xmlhttp.responseText);
                    }
            }
    }
    finally
    {
        xmlhttp = null;
    }
    }
    }
    xmlhttp.send(params);
    }
    else
    {
    var returnValue="";
    xmlhttp.send(params);
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        switch(responseType)
    {
        case "xml":
                    var cmdXML=xmlhttp.responseXML;
                    var elements = cmdXML.getElementsByTagName("cmd");
                    var xmlLen=elements.length;
                    for(var a=0;a<xmlLen;a++){
                    if(jsonData[a].cmd=="txt"){
                returnValue=jsonData[a].code;
                }
                else{
                eval(jsonData[a].code);
                }
                    }
                break;
        case "json":
                var jsonData=eval("("+xmlhttp.responseText+")");
                var jsonLen=jsonData.length;
                for(var a=0;a<jsonLen;a++){
                if(jsonData[a].cmd=="txt"){
                returnValue=jsonData[a].code;
                }
                else{
                eval(jsonData[a].code);
                }
                }
                return returnValue;
                break;
             
             
        default:
            return null;
    }
        if(zyajax.debug){
            alert("请求/响应函数:"+commond);
            alert("服务端返回内容:\n"+xmlhttp.responseText);
            }
    }
    else
    {
        return null;
    }
    }
    return returnValue;
};
zyajax.request=function(){
    var arguNum=arguments.length;
    if(arguNum!=0){
    var objParams=arguments[1]["parameters"];
    var params="";
    if(objParams.length!=0){
    for(var a=0;a<objParams.length;a++){
        params+=objParams[a]+"~*zyzajax*~";
    }
        params=params.substring(0,params.length-11);
    }
        return zyajax.speedsmit(params,arguments[0]["zyajaxfun"],zyajax.myMethod);
    }
    }
    zyajax.getContent=function(domObj){
    if(!-[1,]){
    return domObj.text;
    }else{
    return domObj.textContent;
    }
}
//通过同步GET方式获得指定服务端的数据
//url 指定的服务端处理文件路径
zyajax.getText = function(url)
{
  var xmlhttp = this.getXmlHttpObj();
  xmlhttp.open("GET", url, false);
  xmlhttp.send(null);
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
    return xmlhttp.responseText;
    }
    else
    {
        return null;
    }
};
//通过同步POST方式获得指定服务端的数据
//url 指定的服务端处理文件路径
//post 发送的数据
zyajax.postText = function(url,postData)
{
  var xmlhttp = this.getXmlHttpObj();
  xmlhttp.open("POST", url, false);
  xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xmlhttp.send(postData);
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
    return xmlhttp.responseText;
    }
    else
    {
        return null;
    }
};
//以异步GET方式获得指定服务端的数据
//url 指定的服务端处理文件
//callback 异步处理方法
zyajax.asyncGetText = function(url,callback)
{
    var xmlhttp = this.getXmlHttpObj();
    xmlhttp.open("GET", url, true);
    xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
    try
    {
        if(typeof(callback) == "function")
        {
            callback(xmlhttp.responseText);
        }
}
finally
{
    xmlhttp = null;
}
}
}
    xmlhttp.send(null);
};
//以异步Post方式获得指定服务端的数据
//url 指定的服务端处理文件
//callback 异步处理方法
//post 发送的数据
zyajax.asyncPostText = function(url,callback,postData)
{
    var xmlhttp = this.getXmlHttpObj();
    xmlhttp.open("POST", url, true);
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
    try
    {
        if(typeof(callback) == "function")
        {
            callback(xmlhttp.responseText);
        }
}
finally
{
    xmlhttp = null;
}
}
}
    xmlhttp.send(postData);
};
//通过同步GET方式获得指定服务端的数据
//url 指定的服务端处理文件路径
zyajax.getXml = function(url)
{
  var xmlhttp = this.getXmlHttpObj();
  xmlhttp.open("GET", url, false);
  xmlhttp.send(null);
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
    return xmlhttp.responseXML;
    }
    else
    {
        return null;
    }
};
//通过同步Post方式获得指定服务端的数据
//url 指定的服务端处理文件路径
//post 发送的数据
zyajax.postXml = function(url,postData)
{
  var xmlhttp = this.getXmlHttpObj();
  xmlhttp.open("POST", url, false);
  xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xmlhttp.send(postData);
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
    return xmlhttp.responseXML;
    }
    else
    {
        return null;
    }
};
//以异步GET方式获得指定服务端的数据
//url 指定的服务端处理文件
//callback 异步处理方法
zyajax.asyncGetXml = function(url,callback)
{
    var xmlhttp = this.getXmlHttpObj();
    xmlhttp.open("GET", url, true);
    xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
    try
    {
        if(typeof(callback) == "function")
        {
            callback(xmlhttp.responseXML);
        }
        }
        finally
        {
        xmlhttp = null;
        }
    }
}
    xmlhttp.send(null);
};
//以异步Post方式获得指定服务端的数据
//url 指定的服务端处理文件
//callback 异步处理方法
zyajax.asyncPostXml = function(url,callback,postData)
{
    var xmlhttp = this.getXmlHttpObj();
    xmlhttp.open("POST", url, true);
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp.onreadystatechange = function()
        {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
            try
            {
                if(typeof(callback) == "function")
                {
                    callback(xmlhttp.responseXML);
                }
        }
        finally
        {
            xmlhttp = null;
        }
        }
        }
    xmlhttp.send(postData);
};

 

本文转载自:http://my.xueh5.com/mattsi/detail-3622.html

共有 人打赏支持
B
粉丝 1
博文 1
码字总数 0
作品 0
杭州
加载中

评论(2)

Mr_K
Mr_K
值得收藏
粥圆饼-
粥圆饼-
很有深度,非常详细!很棒!
MongoDB学习笔记~关于官方驱动集成IQueryable之后的一些事

关于官方驱动集成IQueryable之后的一些事,有好事也有坏事,好事就是它会将你的linq语句非常友好的翻译成MongoDB语句,而坏事就是有一些linq语句不会被翻译,不会被翻译的代价就是将整个结果...

mcy247
2017/12/06
0
0
webx3框架中@Params 这个的基层代码怎么实现的

像这段代码.我查资料说 这种写法是简易写法, 找基层的代码没有找到.请大神们,贴出来简易代码的原生态.thanks/

RainMan_
2015/08/06
83
1
JS能否实现发送http请求 原生态Ajax也行

JS能否实现发送http请求 原生态Ajax也行。 比如像Handler发送一个请求。

Contac
2013/02/22
7.9K
2
Jquery~$when_done_then的用法

对于$.ajax请求来说,如果层级比较多,程序看起来会比较乱,而为了解决这种问题,才有了$when...done...fail...then的封装,它将$.ajax这嵌套结构转成了顺序平行的结果,向下面的$.ajax写法,...

mcy247
2017/12/06
0
0
Jingle怎么传递参数啊

@问题石 你好,想跟你请教个问题: 社区博客 这个data-url 怎么传递参数啊比如我想点击这个后 ajax到blog.php?pid=4&ppid=4 还有救是accsess成功后..我不想是用js模板引擎,我想用原生态的js解...

amu1433
2014/05/29
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

Java日期和时间获取问题

获取年月日时分秒 Calendar cal = Calendar.getInstance();//获取年int year = cal.get(Calendar.YEAR);//获取月,范围是0-11,最后使用需+1int month = cal.get(Cal...

lanyu96
23分钟前
7
0
Ceph学习笔记2-在Kolla-Ansible中使用Ceph后端存储

环境说明 使用Kolla-Ansible请参考《使用Kolla-Ansible在CentOS 7单节点上部署OpenStack Pike》; 部署Ceph服务请参考《Ceph学习笔记1-Mimic版本多节点部署》。 配置Ceph 以osdev用户登录: ...

LastRitter
27分钟前
6
0
OSChina 周二乱弹 —— 老司机表示右手无处安放

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @花间小酌 :分享李宗盛的单曲《鬼迷心窍》--春风再美也比不上你的笑 《鬼迷心窍》 - 李宗盛 手机党少年们想听歌,请使劲儿戳(这里) 每天早...

小小编辑
39分钟前
225
5
复习2

10月22日任务 awk 中使用外部shell变量 awk 合并一个文件 把一个文件多行连接成一行 awk中gsub函数的使用 awk 截取指定多个域为一行 过滤两个或多个关键词 用awk生成以下结构文件 awk用print...

hhpuppy
47分钟前
5
0
原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
62
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部