很多时候Ajax的xmlHttpRequest请求都不是并发的,所以可以直接在JS中调用,或者调用jquery中的方法即可;
但是如果考虑到请求并发的情况,而且时间比较长并且频率也比较高,就需要考虑连接池问题了;
下面是Ajax连接池代码:
code:
但是如果考虑到请求并发的情况,而且时间比较长并且频率也比较高,就需要考虑连接池问题了;
下面是Ajax连接池代码:
code:
var XMLHttp = {
_objPool: [],
_getInstance: function() {
for (var i = 0; i < this._objPool.length; i++) {
if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4) {
return this._objPool[i];
}
}
// IE5中不支持push方法
this._objPool[this._objPool.length] = this._createObj();
return this._objPool[this._objPool.length - 1];
},
_createObj: function() {
if (window.XMLHttpRequest) {
var objXMLHttp = new XMLHttpRequest();
}
else {
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
for (var n = 0; n < MSXML.length; n++) {
try {
var objXMLHttp = new ActiveXObject(MSXML[n]);
break;
}
catch (e) {
}
}
}
// mozilla某些版本没有readyState属性
if (objXMLHttp.readyState == null) {
objXMLHttp.readyState = 0;
objXMLHttp.addEventListener("load", function() {
objXMLHttp.readyState = 4;
if (typeof objXMLHttp.onreadystatechange == "function") {
objXMLHttp.onreadystatechange();
}
}, false);
}
return objXMLHttp;
},
// 发送请求(方法[post,get], 地址, 数据, 回调函数)
sendReq: function(method, url, data, callback) {
var objXMLHttp = this._getInstance();
with (objXMLHttp) {
try {
// 加随机数防止缓存
if (url.indexOf("?") > 0) {
url += "&randnum=" + Math.random();
}
else {
url += "?randnum=" + Math.random();
}
open(method, url, true);
setrequestheader("cache-control", "no-cache"); //不缓存请求页面
setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); // 设定请求编码方式
send(data);
onreadystatechange = function() {
if (objXMLHttp.readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304)) {
callback(objXMLHttp);
url = null;
data = null;
callback = null;
method = null;
CollectGarbage();
}
}
}
catch (e) {
alert("脚本出错:" + e);
}
}
}
};
调用示例:_objPool: [],
_getInstance: function() {
for (var i = 0; i < this._objPool.length; i++) {
if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4) {
return this._objPool[i];
}
}
// IE5中不支持push方法
this._objPool[this._objPool.length] = this._createObj();
return this._objPool[this._objPool.length - 1];
},
_createObj: function() {
if (window.XMLHttpRequest) {
var objXMLHttp = new XMLHttpRequest();
}
else {
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
for (var n = 0; n < MSXML.length; n++) {
try {
var objXMLHttp = new ActiveXObject(MSXML[n]);
break;
}
catch (e) {
}
}
}
// mozilla某些版本没有readyState属性
if (objXMLHttp.readyState == null) {
objXMLHttp.readyState = 0;
objXMLHttp.addEventListener("load", function() {
objXMLHttp.readyState = 4;
if (typeof objXMLHttp.onreadystatechange == "function") {
objXMLHttp.onreadystatechange();
}
}, false);
}
return objXMLHttp;
},
// 发送请求(方法[post,get], 地址, 数据, 回调函数)
sendReq: function(method, url, data, callback) {
var objXMLHttp = this._getInstance();
with (objXMLHttp) {
try {
// 加随机数防止缓存
if (url.indexOf("?") > 0) {
url += "&randnum=" + Math.random();
}
else {
url += "?randnum=" + Math.random();
}
open(method, url, true);
setrequestheader("cache-control", "no-cache"); //不缓存请求页面
setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); // 设定请求编码方式
send(data);
onreadystatechange = function() {
if (objXMLHttp.readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304)) {
callback(objXMLHttp);
url = null;
data = null;
callback = null;
method = null;
CollectGarbage();
}
}
}
catch (e) {
alert("脚本出错:" + e);
}
}
}
};
//发送信息
function sendMessage(username, uid, data1, user_to) {
if (isNaN(uid)) return;
var data = "[data]=" + escape(data1);
var url = "Ajax_method.aspx?method=sendMessage&id=" + uid + "&username=" +escape(username) + "&user_to=" + user_to;
XMLHttp.sendReq("post", url, data, function(request) {
var state = request.responseText;
if (state == "shibai") {
alert("发送信息失败...");
}
});
}
function sendMessage(username, uid, data1, user_to) {
if (isNaN(uid)) return;
var data = "[data]=" + escape(data1);
var url = "Ajax_method.aspx?method=sendMessage&id=" + uid + "&username=" +escape(username) + "&user_to=" + user_to;
XMLHttp.sendReq("post", url, data, function(request) {
var state = request.responseText;
if (state == "shibai") {
alert("发送信息失败...");
}
});
}