您的位置:首页 > 理论基础 > 计算机网络

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

2009-11-14 14:59 381 查看
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('&');
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: