在之前发表的文章里提到过一种发送XMLHttp请求的方法,在这里提供一个更完善的方案。
代码:
重新编码应用:
VBScript.js
Function rsB(vIn)
rsB=MidB(vIn,1)
End Function
Function vbChar(ss)
vbChar = Chr(ss)
End Function
这里把它设计成对象的形式,可以通过XMLHttp直接取得这个对象,同时,应用池的思想,在浏览器加载时自动生成对象池,可以满足用户大量的异步请求。
继承之前的方法,动态加载JS文件,选择性显示请求进程,还有编码问题(使用之前要加载VBScript.js
文件)。
代码:
1
var XMLHttp = {
2
_objPool: [],
3
_getInstance: function (){//=============从XMLHttpRequest实例对象池中取得一个实例
4
for (var i = 0; i < this._objPool.length; i ++){
5
if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4){
6
return this._objPool[i];
7
}
8
}
9
10
// IE5中不支持push方法
11
this._objPool[this._objPool.length] = this._createObj();
12
13
return this._objPool[this._objPool.length - 1];
14
},
15
16
_createObj: function (){//================创建XMLHttpRequest实例对象
17
if (window.XMLHttpRequest){
18
var objXMLHttp = new XMLHttpRequest();
19
}else{
20
var MSXML = ['Microsoft.XMLHTTP','MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
21
for(var n = 0; n < MSXML.length; n ++){
22
try{
23
var objXMLHttp = new ActiveXObject(MSXML[n]);
24
break;
25
}catch(e){}
26
}
27
}
28
29
// mozilla某些版本没有readyState属性
30
if (objXMLHttp.readyState == null){
31
objXMLHttp.readyState = 0;
32
33
objXMLHttp.addEventListener("load", function (){
34
objXMLHttp.readyState = 4;
35
36
if (typeof objXMLHttp.onreadystatechange == "function"){
37
objXMLHttp.onreadystatechange();
38
}
39
}, false);
40
}
41
return objXMLHttp;
42
},
43
44
loadJs: function(file,type0){
45
var head = document.getElementsByTagName('HEAD').item(0);
46
var script = document.createElement('SCRIPT');
47
script.src = "Js/"+file+".js";
48
if(type0 == "jscript"){
49
script.type = "text/jscript";
50
}else if(type0 == "vbscript"){
51
script.type = "text/vbscript";
52
}else{
53
script.type = "text/javascript";
54
}
55
head.appendChild(script);
56
},
57
58
showLoadInfo:function(){
59
try{
60
document.getElementById("load").style.visibility = "visible";
61
document.getElementById("browser").style.visibility = "hidden";
62
}catch(e){}
63
},
64
65
// 发送请求(方法[post,get], 地址, 数据, 回调函数)
66
//==================发送异步请求
67
sendReq: function (method, url, data, callback){
68
var objXMLHttp = this._getInstance();
69
70
with(objXMLHttp){
71
try{
72
// 加随机数防止缓存
73
if (url.indexOf("?") > 0){
74
url += "&randnum=" + Math.random();
75
}else{
76
url += "?randnum=" + Math.random();
77
}
78
open(method, url, true);
79
// 设定请求编码方式
80
setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
81
send(data);
82
onreadystatechange = function (){
83
if (objXMLHttp.readyState == 4) {
84
if (objXMLHttp.status == 200) {
85
callback(objXMLHttp);
86
//document.getElementById("load").style.visibility = "hidden";
87
}else if(objXMLHttp.status == 404){
88
alert("找不到文件");
89
}else{
90
alert("HTTP error: "+objXMLHttp.status);
91
}
92
}
93
}
94
}catch(e){
95
alert("Error\n"+e);
96
}
97
}
98
}
99
};
100
101
<!--============不要修改以下代码!!==============->
102
glbEncode=new Array();
103
//重编码
104
function reCode(b){
105
var s=rsB(b+" ");
106
s=escape(s).replace(/%u/gi,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/ig,"%@$1$2");
107
var uniS=s.match(/\%@(.{4})/g);
108
s=s.replace(/@/g,"");
109
if(uniS){
110
var k;
111
for(var i=0;i<uniS.length;i++){
112
k=uniS[i].substring(2,6);
113
if(!glbEncode[k]){
114
glbEncode[k]=escape(vbChar(eval("0x"+k))).substring(1,6);
115
}
116
}
117
tempA=s.split("%");
118
for(var i=0;i<tempA.length;i++){
119
if(tempA[i].length!=2){
120
tempA[i]=glbEncode[tempA[i]];
121
}
122
}
123
s=tempA.join("%");
124
}
125
return unescape(s);
126
}
var XMLHttp = {2
_objPool: [],3
_getInstance: function (){//=============从XMLHttpRequest实例对象池中取得一个实例4
for (var i = 0; i < this._objPool.length; i ++){5
if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4){6
return this._objPool[i];7
}8
}9
10
// IE5中不支持push方法11
this._objPool[this._objPool.length] = this._createObj();12

13
return this._objPool[this._objPool.length - 1];14
},15

16
_createObj: function (){//================创建XMLHttpRequest实例对象17
if (window.XMLHttpRequest){18
var objXMLHttp = new XMLHttpRequest();19
}else{20
var MSXML = ['Microsoft.XMLHTTP','MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];21
for(var n = 0; n < MSXML.length; n ++){22
try{23
var objXMLHttp = new ActiveXObject(MSXML[n]); 24
break;25
}catch(e){}26
}27
} 28
29
// mozilla某些版本没有readyState属性30
if (objXMLHttp.readyState == null){31
objXMLHttp.readyState = 0;32

33
objXMLHttp.addEventListener("load", function (){34
objXMLHttp.readyState = 4;35
36
if (typeof objXMLHttp.onreadystatechange == "function"){37
objXMLHttp.onreadystatechange();38
}39
}, false);40
}41
return objXMLHttp;42
},43
44
loadJs: function(file,type0){45
var head = document.getElementsByTagName('HEAD').item(0);46
var script = document.createElement('SCRIPT');47
script.src = "Js/"+file+".js";48
if(type0 == "jscript"){49
script.type = "text/jscript";50
}else if(type0 == "vbscript"){51
script.type = "text/vbscript";52
}else{53
script.type = "text/javascript";54
}55
head.appendChild(script);56
},57
58
showLoadInfo:function(){59
try{60
document.getElementById("load").style.visibility = "visible";61
document.getElementById("browser").style.visibility = "hidden";62
}catch(e){}63
},64
65
// 发送请求(方法[post,get], 地址, 数据, 回调函数)66
//==================发送异步请求67
sendReq: function (method, url, data, callback){68
var objXMLHttp = this._getInstance();69

70
with(objXMLHttp){71
try{72
// 加随机数防止缓存73
if (url.indexOf("?") > 0){74
url += "&randnum=" + Math.random();75
}else{76
url += "?randnum=" + Math.random();77
}78
open(method, url, true);79
// 设定请求编码方式80
setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');81
send(data);82
onreadystatechange = function (){83
if (objXMLHttp.readyState == 4) {84
if (objXMLHttp.status == 200) {85
callback(objXMLHttp);86
//document.getElementById("load").style.visibility = "hidden";87
}else if(objXMLHttp.status == 404){88
alert("找不到文件");89
}else{90
alert("HTTP error: "+objXMLHttp.status);91
}92
}93
}94
}catch(e){95
alert("Error\n"+e);96
}97
}98
}99
};100

101
<!--============不要修改以下代码!!==============->102
glbEncode=new Array();103
//重编码104
function reCode(b){105
var s=rsB(b+" ");106
s=escape(s).replace(/%u/gi,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/ig,"%@$1$2");107
var uniS=s.match(/\%@(.{4})/g);108
s=s.replace(/@/g,"");109
if(uniS){110
var k;111
for(var i=0;i<uniS.length;i++){112
k=uniS[i].substring(2,6);113
if(!glbEncode[k]){114
glbEncode[k]=escape(vbChar(eval("0x"+k))).substring(1,6);115
}116
}117
tempA=s.split("%");118
for(var i=0;i<tempA.length;i++){119
if(tempA[i].length!=2){120
tempA[i]=glbEncode[tempA[i]];121
}122
}123
s=tempA.join("%");124
}125
return unescape(s);126
}重新编码应用:
VBScript.js
Function rsB(vIn)
rsB=MidB(vIn,1)
End Function
Function vbChar(ss)
vbChar = Chr(ss)
End Function这里把它设计成对象的形式,可以通过XMLHttp直接取得这个对象,同时,应用池的思想,在浏览器加载时自动生成对象池,可以满足用户大量的异步请求。
继承之前的方法,动态加载JS文件,选择性显示请求进程,还有编码问题(使用之前要加载VBScript.js
文件)。


_getInstance:
浙公网安备 33010602011771号