//给大家小小的漏一手本人亲自精心撰写的小型通用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;
}
欢迎大家猛烈拍砖!