一个ajax通用函数(xmlhttprequest封装)_i++一个ajax通用函数(xmlhttprequest封装)_safari_02Code

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('&');

}