一个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('&');
}
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('&');
}
相关文章推荐
- 对AJAX中XMLHttpRequest的封装
- Ajax技术之Ajax重构(封装XMLHttpRequest)
- Ajax定义一个XMLHttpRequest工厂
- Ajax应用示例: XMLHttpRequest封装
- 1.Ajax基础——XMLHttpRequest、Get/Post、封装Ajax
- AJAX 一个IE和Firefox兼容的XMLHttpRequest
- Java乔晓松-ajax中xmlhttprequest的属性、方法和ajax封装post方法
- XmlHttpRequest CORS 与 AJAX封装类
- js原生创建封装ajax的方法,附XMLHttpRequest状态码
- 又一个Ajax获取xmlHTTPRequest代码
- Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递
- Ajax之工厂模式封装XMLHttpRequest
- Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。
- 【Ajax 2】封装Ajax的核心对象:XMLHttpRequest对象
- 如何用ajax来创建一个XMLHttpRequest对象
- Ajax基础知识整理---创建一个XMLHttpRequest对象
- Ajax中封装创建XMLHttpRequest对象的方法
- XMLHTTPRequest在SuperMap IS.NET AjaxScripts地震灾害情报系统中的一个应用
- 【Ajax 2】封装Ajax的核心对象:XMLHttpRequest对象