给大家漏一手本人亲自精心撰写的通用ajax框架,完全兼容 IE FireFox各个版本!(附完整源码及完整范例)

//给大家小小的漏一手本人亲自精心撰写的小型通用ajax框架,完全兼容 IE FireFox各个版本!(附完整源代码及完整范例)

var http_request = false;
var callback_func;

//发送ajax请求 get或post 完全兼容 IE FireFox各个版本,程序在 IE5.0,6.0,7.0,8.0 FireeFox2.0,30下均做了全面测试
function sendRequest(url,argstr, func, method) {

    http_request = false;
    callback_func = func;
  

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        //if (http_request.overrideMimeType) {
        //    http_request.overrideMimeType('text/xml');
        //}
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) { }
        }
    }

    if (!http_request) {
        alert('不能建立 XMLHTTP 对象');
        return false;
    }


    if (method == 'GET') {
        //http_request.onreadystatechange = alertContents;
        http_request.open('GET', url + '?' + argstr, false);    //目前是同步 true:异步 false:同步
        http_request.send(null);
        alertContents();
    }
    else {
        //http_request.onreadystatechange = alertContents;
        http_request.open('POST', url + '', false);
        http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
       
        http_request.send(argstr);
        alertContents();
    }
}

//延迟处理,超时后的处理
function alertContents() {
    if (http_request.readyState == 4) {
        if (http_request.status == 200 || http_request.status == 0) {
            callback_func(http_request.responseText);
        } else {
        alert('服务端返回状态: ' + http_request.statusText);
        }
    }
    else {
        //alert('数据加载中...');
    }
}

 

//使用说明
//二,在页面使用如下代码将js文件包含进来:
//<script language=javascript src="ajax.js"></script>

//三,在页面调用sendRequest(...)方法:
//如:<a href="javascript:sendRequest(param,function,'GET')" >调用AJAX</a>
//或:<input type="button" value="提交" οnclick="sendRequest('post.do',param,function,'POST')" />
//注释(以第一个为例):
//暂时就不用了 default.do: 这个例子采用ajax通过一个链接请求default.do页面,
//param: 为参数,可以为空,也可以不为空,比如name=value&password=123456,也可以通过把一个表单(form)的字段组合起来作为一个字符串传递
//过去,  
// function: 是你自己写的一个函数,用于处理返回的内容,一般的处理是
//将返回的内容显示在页面,一个典型的例子:
//   function search(str){
//         alert(str); //用于调试.
//        myId.innerHTML = str;
//   }
//GET: 是请求的方法,简单的说,get代表请求一个资源,post代表提交参数并请求资源.
//建立 DOM对象 方法 1
function CreateDocument(objectType) {
    var aVersions, oXmlDom;
    switch (objectType) {
        case 1:
            //使用"MSXML2.FreeThreadedDOMDocument.6.0"转换时出错
            //大概查了一下,是安全性做了限制
            aVersions = ["MSXML2.FreeThreadedDOMDocument.6.0",
                             "MSXML2.FreeThreadedDOMDocument.5.0",
                             "MSXML2.FreeThreadedDOMDocument.4.0",
                             "MSXML2.FreeThreadedDOMDocument.3.0",
                             "MSXML.FreeThreadedDOMDocument",
                             "Microsoft.XmlDom"
                            ];
            break;
        case 2:
            //使用"MSXML2.XSLTemplate.6.0"转换时出错
            //大概查了一下,是安全性做了限制
            aVersions = ["MSXML2.XSLTemplate.6.0",
                             "MSXML2.XSLTemplate.5.0",
                             "MSXML2.XSLTemplate.4.0",
                             "MSXML2.XSLTemplate.3.0",
                             "MSXML.XSLTemplate",
                             "Microsoft.XmlDom"
                            ];
            break;
        default:
            aVersions = ["MSXML2.DOMDocument.6.0",
                             "MSXML2.DOMDocument.5.0",
                             "MSXML2.DOMDocument.4.0",
                             "MSXML2.DOMDocument.3.0",
                             "MSXML2.DOMDocument",
                             "MSXML.DOMDocument",
                             "Microsoft.XmlDom"
                            ];
            break;
    }

    for (var i = 0; i < aVersions.length; i++) {
        try {
            oXmlDom = new ActiveXObject(aVersions[i]);
            break;
        }
        catch (error) {
            // 不做任何处理
        }
    }
    if (oXmlDom == null) {
        //throw new Error("MSXML没有安装");
        try {
            oXmlDom = new DOMParser();
            oXmlDom.loadXML = function () { alert("123"); return oXmlDom.parseFromString(str, "text/xml"); }
        }
        catch (e) { }
       
    }

    return oXmlDom;
}

//建立 DOM对象 方法 2 完全兼容 IE FireFox各个版本,程序在 IE5.0,6.0,7.0,8.0 FireeFox2.0,30下均做了全面测试
//主要用于解析ajax 请求后返回的 XML 字符串
//调用范例:
//1.获取某个数据列表的 xml数据 sendRequest("../../Ajax/AjaxMethods/AjaxMethods.do", "method=getwidthlist", SetWidthList, "GET");
//2.获取之后用 js函数 SetWidthList进行xml数据解析,将取得的数据存放到对应的数组中
//var widthvalues = new Array();
//var widthtexts = new Array();
//var widthssize = 0;
//function SetWidthList(str) {
//    var oXmlDom = createXMLDOM(str);
//    var list = oXmlDom.getElementsByTagName("F0001");
//    alert(list.length);
//    for (var i = 0; i < list.length; i++) {
//        var svalue = oXmlDom.getElementsByTagName("F0001")[i].firstChild.nodeValue;
//        widthvalues[widthssize] = svalue;

//        var stitle = oXmlDom.getElementsByTagName("F0003")[i].firstChild.nodeValue;
//        widthtexts[widthssize] = stitle;

//        widthssize++;
//    }
//}
//返回的 xml格式如下:
//<tables>
// <record>
//    <F0001>1d0c24d6962c4573b0969500ff63779c</F0001>
//    <F0003>42''</F0003>
// </record>
// <record>
//    <F0001>2a8bc24feef441aa939bffb4aa5fbc11</F0001>
//    <F0003>46 1/2''</F0003>
// </record>
//注:上述范例及本方法在在 IE5.0,6.0,7.0,8.0 FireeFox2.0,30下均做了全面测试
function createXMLDOM(str) {
    var oXmlDom;
    var arrSignatures = ["MSXML2.DOMDocument.6.0",
                             "MSXML2.DOMDocument.5.0",
                             "MSXML2.DOMDocument.4.0",
                             "MSXML2.DOMDocument.3.0",
                             "MSXML2.DOMDocument",
                             "MSXML.DOMDocument",
                             "Microsoft.XmlDom"
                            ];
if(window.ActiveXObject)
    for (var i = 0; i < arrSignatures.length; i++) {
        try {
            var oXmlDom = new ActiveXObject(arrSignatures[i]);
            oXmlDom.loadXML(str);
            //return oXmlDom;
            break;
        } catch (oError) {
            //ignore
        }
    }
}
else{
        try {
            var Parser = new DOMParser();
            oXmlDom = Parser.parseFromString(str, "text/xml");
        }
        catch (e) { }
}

    if (oXmlDom == null) {
        //throw new Error("MSXML没有安装");
    }

    return oXmlDom;   
}

//取出url中的各个参数对应的值 url参数解析
function getURLParam(strParamName, url) {
    var strReturn = "";
    var strHref = url.toLowerCase();
    if (strHref.indexOf("?") > -1) {
        var strQueryString = strHref.substr(strHref.indexOf("?") + 1).toLowerCase();
        var aQueryString = strQueryString.split("&");
        for (var iParam = 0; iParam < aQueryString.length; iParam++) {
            if (aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1) {
                var aParam = aQueryString[iParam].split("=");
                strReturn = aParam[1];
                break;
            }
        }
    }
    return strReturn;
}

欢迎大家猛烈拍砖!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值