简单通用Ajax函数
1 //一个简单的执行ajax的通用函数 2 //带一个参数,参数为对象,需要传送的东西,都在里面 3 function ajax(options){ 4 //如果没有传入响应的值,就用默认的代替 5 options = { 6 //HTTP请求类型 7 type : options.type || "POST", 8 //请求的URL 9 url : options.url || "www.XXX.com/XXX.php?", 10 //请求的超时时间 11 timeout : options.timeout || 5000, 12 //请求失败、成功、完成 13 onComplete : options.onComplete || function(){alert(请求成功)}, 14 onError : options.onError || function(){alert(请求失败)}, 15 onSuccess : options.onSuccess || function(){alert(请求完成)}, 16 //服务器返回的数据类型,用于判断服务器返回的数据。从而进行操作 17 date : options.date || " " 18 } 19 20 //创建XML对象 21 var xml = new XMLHttpRequest(); 22 //初始化异步请求 23 xml.open(options.type,options.URL,ture); 24 //记录请求是否成功完成 25 var requestDone = false; 26 //初试一个回调函数,用于取消函数 27 setTimeout(function(){ 28 requestDone = true; 29 },options.timeout); 30 31 //监听文档状态的更新 32 xml.onreadystatechange = function(){ 33 //保持等待,知道数据加载完成,并保证请求未超时 34 if(xml.readyState == 4 && !requestDone){ 35 //检查是否请求成功 36 if(httpSuccess(xml)){ 37 //以服务器返回的数据作为参数调用成功回调函数 38 options.onSuccess(httpDate(xml,Date,options.type)); 39 }else{ 40 //否则就是发生了错误,执行Error 41 options.onError(); 42 } 43 //调用完成回调函数 44 options.onComplete(); 45 //避免内漏,清理文档 46 xml = null; 47 } 48 } 49 50 //建立与服务器的连接 51 xml.send(); 52 53 //判断Http响应是否成功 54 function httpSuccess(r){ 55 try{ 56 //如果得不到服务器状态,且正在请求本地文件,则认为成功 57 return !r.status && location.protocolo = "file :" || 58 //所有200到300的状态码都认为成功 59 (r.status > 200 && r.statys < 300) || 60 //文档未被修改也算成功 61 r.statys == 304 || 62 //safiri 在文档未被修改时返回空状态 63 navigator.userAgent.indexof("Safiri") >= 0 && typeof r.status == "undefind"; 64 }catch(e){} 65 //若检查状态失败,则假设请求失败 66 return false; 67 } 68 69 //从 Http 响应中解析正确数据 70 function httpDate(r,type){ 71 //获取 content-type 的首部 72 var ct = r.getResponseHeader("content-type"); 73 //若没有提供默认类型,则判断服务器返回的是否是 xml 数据 74 var date = !type && ct && ct.indexof("xml") >= 0; 75 //若是,获取 xml 对象,否则返回文本内容 76 date = type == "xml" || date ? r.resposeXML : r.resposeText; 77 //若指定类型为 script ,则以 javascript 的形式执行返回文本 78 if(type == "script"){ 79 eval.call(window,date); 80 } 81 //返回响应数据(或为xml或为字符串) 82 return date; 83 } 84 }
兴趣,是最好的老师。