一个ajax通用函数(xmlhttprequest封装)
Code
var ajax = function(options){
options = {
type : options.type || 'POST',
url : options.url || '',
timeout : options.timeout || 5000,
onComplete : options.onComplete || function(){},
onError : options.onError || function(){},
onSuccess : options.onSuccess || function(){},
data : options.data || ''
}
if(typeof XMLHttpRequest === 'undefined'){
XMLHttpRequest = function(){
return new ActiveXObject(
navigator.userAgent.indexOf('MSIE 5') >= 0 ?
'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP'
);
}
}
var xml = new XMLHttpRequest();
xml.open(options.type,options.url,true);
var timeoutLength = options.timeout;
var requestDone = false;
setTimeout(function(){
requestDone = true;
},timeoutLength);
xml.onreadystatechange = function(){
if(xml.readyState == 4 && !requestDone){
if(httpSuccess(xml)){
options.onSuccess(httpData(xml,options.type));
}else{
options.onError();
}
options.onComplete();
xml = null;
}
};
xml.send();
var httpSuccess = function(r){
try{
return !r.status && location.protocol == "file:"
|| (r.status >= 200 && r.status < 300)
|| r.status == 304
|| navigator.userAgent.indexOf('Safari') >= 0 && typeof r.status == 'undefined';
}catch(e){}
return false;
}
var httpData = function(r,type){
var ct = r.getResponseHeader("content-type");
var data = !type && ct.indexOf('xml') >= 0 ;
data = type == 'xml' || data ? r.responseXML : r.responseText;
if(type == 'script'){
eval.call(window,data);
return data;
}
}
}
var serialize = function(a){
var s = [];
if(a.constructor == Array){
for(var i = 0 ; i < a.length ; i++){
s.push(a[i].name + '=' + encodeURIComponent(a[i].value));
}
}else{
for(var j in a){
s.push(j + '=' + encodeURIComponent(a[j]));
}
}
return s.join('&');
}
var ajax = function(options){
options = {
type : options.type || 'POST',
url : options.url || '',
timeout : options.timeout || 5000,
onComplete : options.onComplete || function(){},
onError : options.onError || function(){},
onSuccess : options.onSuccess || function(){},
data : options.data || ''
}
if(typeof XMLHttpRequest === 'undefined'){
XMLHttpRequest = function(){
return new ActiveXObject(
navigator.userAgent.indexOf('MSIE 5') >= 0 ?
'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP'
);
}
}
var xml = new XMLHttpRequest();
xml.open(options.type,options.url,true);
var timeoutLength = options.timeout;
var requestDone = false;
setTimeout(function(){
requestDone = true;
},timeoutLength);
xml.onreadystatechange = function(){
if(xml.readyState == 4 && !requestDone){
if(httpSuccess(xml)){
options.onSuccess(httpData(xml,options.type));
}else{
options.onError();
}
options.onComplete();
xml = null;
}
};
xml.send();
var httpSuccess = function(r){
try{
return !r.status && location.protocol == "file:"
|| (r.status >= 200 && r.status < 300)
|| r.status == 304
|| navigator.userAgent.indexOf('Safari') >= 0 && typeof r.status == 'undefined';
}catch(e){}
return false;
}
var httpData = function(r,type){
var ct = r.getResponseHeader("content-type");
var data = !type && ct.indexOf('xml') >= 0 ;
data = type == 'xml' || data ? r.responseXML : r.responseText;
if(type == 'script'){
eval.call(window,data);
return data;
}
}
}
var serialize = function(a){
var s = [];
if(a.constructor == Array){
for(var i = 0 ; i < a.length ; i++){
s.push(a[i].name + '=' + encodeURIComponent(a[i].value));
}
}else{
for(var j in a){
s.push(j + '=' + encodeURIComponent(a[j]));
}
}
return s.join('&');
}