感觉用着不错,不是原创,只做收藏
/*调用方式举例(GoogleSuggest效果,测试通过):
MyAjaxObj.sendPost("AjaxOperations.aspx", null, googleSuggestCallBack, true, googleSuggestCallBackError);
或者 MyAjaxObj.sendGet("AjaxOperations.aspx", null, googleSuggestCallBack, true, googleSuggestCallBackError);
*/
//封装XMLHTTP的MyAjaxObj类的代码
var MyAjaxObj = new Object();
//定义一个XMLHTTP的数组
//MyAjaxObj.reqList = new Array(); //定义成数组不合适,释放资源时,数组不能很方便地对指定项进行删除
MyAjaxObj.reqList = []; //定义成对象则可以
//创建一个XMLHTTP对象,兼容不同的浏览器
function getXmlHttp() {
return createXMLHTTP(); //需调用 common.js里的createXMLHTTP()方法
}
/*封装XMLHTTP向服务器发送请求的操作
url:向服务器请求的路径;method:请求的方法,即是get/post;***callback:当服务器成功返回结果时,调用的函数(类似c#回调函数)***
data:向服务器请求时附带的数据;urlencoded:url是否编码;callBackError;当服务器返回错误时调用的函数
*/
MyAjaxObj.send = function(url, method, callback, data, urlencoded, callBackError) {
var req = getXmlHttp(); //得到一个XMLHTTP的实例
//当XMLHTTP的请求状态发生改变时调用 (核心处理函数)
req.onreadystatechange = function() {
// 当请求已经加载
if (req.readyState == 4) {
// 当请求返回成功
if (req.status == 200) { //或者 req.status < 400
// 当定义了成功回调函数时,执行成功回调函数
if (callback)
callback(req, data);
}
// 当请求返回错误
else {
//当定义了失败回调函数时,执行失败回调函数
if (callBackError)
callBackError(req, data);
}
//删除XMLHTTP,释放资源
try {
delete req;
req = null;
} catch (e) { }
}
}
//如果以POST方式回发服务器
if (method.toUpperCase() == "POST") {
req.open("POST", url, true);
//请求需要编码
if (urlencoded)
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(data);
MyAjaxObj.reqList.push(req);
}
//以GET方式请求
else {
req.open("GET", url, true);
req.send(null);
MyAjaxObj.reqList.push(req);
}
return req;
}
//全部清除XMLHTTP数组元素,释放资源
MyAjaxObj.clearReqList = function() {
var len = MyAjaxObj.reqList.length;
for (var i = 0; i < len; i++) {
var req = MyAjaxObj.reqList[i];
if (req) {
try {
delete req;
} catch (e) { }
}
}
MyAjaxObj.reqList = [];
}
//进一步封装XMLHTTP以POST方式发送请求时的代码
//clear:是否清除XMLHTTP数组的所有元素;其他参数的意义见 MyAjaxObj.send
MyAjaxObj.sendPost = function(url, data, callback, isClear, callBackError) {
if (isClear) {
MyAjaxObj.clearReqList();
}
MyAjaxObj.send(url, "POST", callback, data, true, callBackError); //post方法需要编码
}
//进一步封装XMLHTTP以GET方式发送请求时的代码
MyAjaxObj.sendGet = function(url, args, callback, isClear, callBackError) {
if (isClear)
MyAjaxObj.clearReqList();
return MyAjaxObj.send(url, "GET", callback, args, false, callBackError);
}
// 创建 XMLHttpRequest对象,以发送ajax请求
function createXMLHTTP() {
var xmlHttp = false;
var arrSignatures = ["Microsoft.XMLHTTP", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP"];
for (var i = 0; i < arrSignatures.length; i++) {
try {
xmlHttp = new ActiveXObject(arrSignatures[i]);
return xmlHttp;
}
catch (oError) {
xmlHttp = false; //ignore
}
}
// throw new Error("MSXML is not installed on your system.");
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
return xmlHttp;
}
MyAjaxObj.sendPost("AjaxOperations.aspx", null, googleSuggestCallBack, true, googleSuggestCallBackError);
或者 MyAjaxObj.sendGet("AjaxOperations.aspx", null, googleSuggestCallBack, true, googleSuggestCallBackError);
*/
//封装XMLHTTP的MyAjaxObj类的代码
var MyAjaxObj = new Object();
//定义一个XMLHTTP的数组
//MyAjaxObj.reqList = new Array(); //定义成数组不合适,释放资源时,数组不能很方便地对指定项进行删除
MyAjaxObj.reqList = []; //定义成对象则可以
//创建一个XMLHTTP对象,兼容不同的浏览器
function getXmlHttp() {
return createXMLHTTP(); //需调用 common.js里的createXMLHTTP()方法
}
/*封装XMLHTTP向服务器发送请求的操作
url:向服务器请求的路径;method:请求的方法,即是get/post;***callback:当服务器成功返回结果时,调用的函数(类似c#回调函数)***
data:向服务器请求时附带的数据;urlencoded:url是否编码;callBackError;当服务器返回错误时调用的函数
*/
MyAjaxObj.send = function(url, method, callback, data, urlencoded, callBackError) {
var req = getXmlHttp(); //得到一个XMLHTTP的实例
//当XMLHTTP的请求状态发生改变时调用 (核心处理函数)
req.onreadystatechange = function() {
// 当请求已经加载
if (req.readyState == 4) {
// 当请求返回成功
if (req.status == 200) { //或者 req.status < 400
// 当定义了成功回调函数时,执行成功回调函数
if (callback)
callback(req, data);
}
// 当请求返回错误
else {
//当定义了失败回调函数时,执行失败回调函数
if (callBackError)
callBackError(req, data);
}
//删除XMLHTTP,释放资源
try {
delete req;
req = null;
} catch (e) { }
}
}
//如果以POST方式回发服务器
if (method.toUpperCase() == "POST") {
req.open("POST", url, true);
//请求需要编码
if (urlencoded)
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(data);
MyAjaxObj.reqList.push(req);
}
//以GET方式请求
else {
req.open("GET", url, true);
req.send(null);
MyAjaxObj.reqList.push(req);
}
return req;
}
//全部清除XMLHTTP数组元素,释放资源
MyAjaxObj.clearReqList = function() {
var len = MyAjaxObj.reqList.length;
for (var i = 0; i < len; i++) {
var req = MyAjaxObj.reqList[i];
if (req) {
try {
delete req;
} catch (e) { }
}
}
MyAjaxObj.reqList = [];
}
//进一步封装XMLHTTP以POST方式发送请求时的代码
//clear:是否清除XMLHTTP数组的所有元素;其他参数的意义见 MyAjaxObj.send
MyAjaxObj.sendPost = function(url, data, callback, isClear, callBackError) {
if (isClear) {
MyAjaxObj.clearReqList();
}
MyAjaxObj.send(url, "POST", callback, data, true, callBackError); //post方法需要编码
}
//进一步封装XMLHTTP以GET方式发送请求时的代码
MyAjaxObj.sendGet = function(url, args, callback, isClear, callBackError) {
if (isClear)
MyAjaxObj.clearReqList();
return MyAjaxObj.send(url, "GET", callback, args, false, callBackError);
}
// 创建 XMLHttpRequest对象,以发送ajax请求
function createXMLHTTP() {
var xmlHttp = false;
var arrSignatures = ["Microsoft.XMLHTTP", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP"];
for (var i = 0; i < arrSignatures.length; i++) {
try {
xmlHttp = new ActiveXObject(arrSignatures[i]);
return xmlHttp;
}
catch (oError) {
xmlHttp = false; //ignore
}
}
// throw new Error("MSXML is not installed on your system.");
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
return xmlHttp;
}

浙公网安备 33010602011771号