var Bind = function(object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function() {
return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));
}
}
var Request = function() {
this.requestexe = this.getNewRequest();
this.action = 'get';
this.url = '';
this.ondone = null;
this.onerror = null;
this.headers = null;
this.body = null;
this.isstart = false;
this.timer = null;
this.paras = null;
}
Request.prototype = {
count : 0,
getNewRequest : function(){
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
try { return new XMLHttpRequest(); } catch(e) {}
alert("XMLHttpRequest not supported");
return null;
},
send : function(){
if(this.isstart) return;
if(this.getCount() > 1){
setTimeout(Bind(this, this.send),500);
return;
}
this.waitOne();
this.isstart = true;
this.url = this.url + "&" + new Date().getTime().toString();
this.requestexe.open(this.action,this.url,true);
if(this.headers){
for (var header in this.headers) {
var val = headers[header];
if (typeof(val) !== "function")
this.requestexe.setRequestHeader(header, val);
}
}
if (this.action.toLowerCase() === "post") {
if ((this.headers === null) || !headers['Content-Type']) {
this.requestexe.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
if (!this.body) {
this.body = "";
}
}
var request = this;
var httpexe = this.requestexe;
this.requestexe.onreadystatechange = function(){
if(httpexe.readyState == 4){
clearTimeout(request.timer);
Bind(request,request.releaseOne());
if(httpexe.status == 200){
if(typeof(request.ondone) === "function"){
request.ondone(httpexe,request.paras);
}
}
else{
if(typeof(request.onerror) === "function"){
request.onerror(httpexe,request.paras);
}
}
}
}
this.timer = setTimeout( function(){
request.requestexe.abort();
clearTimeout(request.timer);
request.releaseOne();
},20000);
this.requestexe.send(this.body);
},
releaseOne: function(){
if(Request.prototype.count >= 0)
Request.prototype.count--;
},
waitOne:function(){
Request.prototype.count++;
},
getCount:function(){
return Request.prototype.count;
}
}
在使用時(shí)如下:
var request = new Request();
request.action = 'get';
request.url = 'requesturl';
request.ondone = function(result,paras){
var p = result.responseText;
};
request.onerror = function(result,paras){
alert(result.status);
};
request.paras = '';
request.send();
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。