文档章节

原生态ajax写法 转载

B
 BACKDEV
发布于 2016/06/24 09:29
字数 1480
阅读 59
收藏 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
86
1
Jquery~$when_done_then的用法

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

mcy247
2017/12/06
0
0
JS能否实现发送http请求 原生态Ajax也行

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

产吅经理
2013/02/22
7.9K
2
JQuery真的不难~第六回 JQ中的异步调用方式

前言 今天主要讲一下JQ中的异步编程,它将ajax进行封装,在进行异步请求时显得非常容易,无论是GET,POST方式,还是text,xml,javascript,json等数据通讯都是那么的自然 现在,我们就走入jq的...

mcy247
2017/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
19分钟前
0
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
21分钟前
1
0
spring mvc拦截器,实现统计http请求的后台运行时间

使用两种方式,实现拦截http请求的后台运行时间。 废话不多说直接上代码 /** * Http请求时间统计 * 拦截所有请求 */public class HttpRquestTimeInterceptor extends HandlerIntercepto...

兜兜毛毛
38分钟前
2
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
54分钟前
4
0

中国龙-扬科
57分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部