js實(shí)現(xiàn)簡單實(shí)用的AJAX完整實(shí)例
本文實(shí)例講述了js實(shí)現(xiàn)簡單實(shí)用的AJAX的方法。分享給大家供大家參考,具體如下:
//版權(quán)歸屬 WUJXPING //ajax 1.2 //更新2012-2-20 //1、異步數(shù)據(jù)加載可以進(jìn)行加載方式get,post的設(shè)定 //2、異步同步模式的屬性設(shè)定 //3、數(shù)據(jù)加載自動(dòng)超時(shí)設(shè)置 //4、***數(shù)據(jù)加載事件的添加,通過事件可以進(jìn)行服務(wù)器數(shù)據(jù)的實(shí)時(shí)處理 //5、增加回調(diào)函數(shù)中用戶自定義參數(shù)this.e //6、增加ajax反復(fù)提交控制,只需將ajax對(duì)象定義為全局變量,每次提交都會(huì)進(jìn)行等待上次提交的執(zhí)行結(jié)果 //7、修改數(shù)據(jù)反復(fù)提交時(shí)XmlHttp對(duì)象被反復(fù)創(chuàng)建的問題 //8、修復(fù)重大BUG,多個(gè)AJAX事件覆蓋問題 //服務(wù)器數(shù)據(jù)返回事件 ajax.prototype.ServerEven=function(Func){ this.callback=new delegate(Func);//實(shí)例化 } //創(chuàng)建異步處理對(duì)象 ajax.prototype.CreateXMLHttp=function(){ if(this.XmlHttp!=null && typeof this.XmlHttp == "object") return this.XmlHttp; xmlhttpObj = ["Microsoft.XmlHttp","MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp"]; //根據(jù)不同的瀏覽器創(chuàng)建XMLHttpRequest if(window.ActiveXObject){ for(i=0;i<xmlhttpObj.length;i++){ //選擇ie兼容版本 try{ this.XmlHttp = new ActiveXObject(xmlhttpObj[i]); }catch(err){ continue; } if(this.XmlHttp) break; } } else if(window.XMLHttpRequest){ this.XmlHttp=new XMLHttpRequest(); } return this.XmlHttp; } //開始調(diào)用 ajax.prototype.Send=function(){ if(this.isbusy)//ajax正忙 return; this.isbusy=true; var xmlhtml=this.CreateXMLHttp(); //創(chuàng)建對(duì)象 if(xmlhtml==null){ this.isbusy=false if(this.callback!=null) this.callback.run("XMLHttpRequest Create Faild!",this.e); return; } var url=this.url; var _this=this; // 加隨機(jī)數(shù)防止緩存 if (url.indexOf("?") > 0) url += "&randnum=" + Math.random(); else url += "?randnum=" + Math.random(); xmlhtml.open(this.method,url,this.async); xmlhtml.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8;"); xmlhtml.setRequestHeader("Cache-Control","no-cache"); xmlhtml.setRequestHeader("Connection","Keep-Alive"); //開啟定時(shí)進(jìn)行超時(shí)等待 var timer=setTimeout(function(){ //if(xmlhtml.readyState!=4){ xmlhtml.abort(); //取消本次傳輸 _this.isbusy=false; if(_this.callback!=null) _this.callback.run("send timeout!",_this.e); clearTimeout(timer); //關(guān)閉定時(shí)器 },this.timeout); if(this.async)//異步數(shù)據(jù)加載時(shí)狀態(tài)變化與事件掛鉤 xmlhtml.onreadystatechange=function(){//接收服務(wù)器響應(yīng) if(xmlhtml.readyState==4){//判斷是否是完成狀態(tài) if(xmlhtml.status==200){ //判斷是否執(zhí)行成功 _this.isbusy=false; clearTimeout(timer); //關(guān)閉定時(shí)器 if(_this.callback!=null)//開始觸發(fā)服務(wù)器事件 _this.callback.run(xmlhtml,_this.e); } } }; try{ xmlhtml.send(this.option); }catch(err){ this.isbusy=false clearTimeout(timer); //關(guān)閉定時(shí)器 alert(err); return; } if(!this.async){//同步數(shù)據(jù)加載時(shí)數(shù)據(jù)返回處理 this.isbusy=false; clearTimeout(timer); //關(guān)閉定時(shí)器 if(this.callback!=null) this.callback.run(xmlhtml,this.e); } } //創(chuàng)建ajax對(duì)象 function ajax(url){ this.method="post";//設(shè)置數(shù)據(jù)提交方式 this.async=true;//是否進(jìn)行異步數(shù)據(jù)加載模式 this.option=""; //請(qǐng)求的參數(shù) this.url=url;//請(qǐng)求的Url連接 this.timeout=1000*60*1;//默認(rèn)超時(shí)時(shí)間為1分鐘 this.e=null;//回調(diào)事件中用戶自定義參數(shù) this.XmlHttp=null;//接收異步創(chuàng)建的對(duì)象防止反復(fù)創(chuàng)建 this.isbusy=false//獲取當(dāng)前ajax的執(zhí)行狀態(tài) this.callback=null;//聲明回調(diào)事件 // 實(shí)現(xiàn)委托的類 delegate=function (func){ this.arr = new Array(); // 回調(diào)函數(shù)數(shù)組 this.add = function(func){ this.arr[this.arr.length] = func; }; this.run = function(sender,e){ for(var i=0;i<this.arr.length;i++){ var func = this.arr[i]; if(typeof func == "function"){ func(sender,e); // 遍歷所有方法以及調(diào)用 } } } this.add(func); } }
更多關(guān)于ajax相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript中ajax操作技巧總結(jié)》及《jquery中Ajax用法總結(jié)》
希望本文所述對(duì)大家ajax程序設(shè)計(jì)有所幫助。
- 原生js實(shí)現(xiàn)ajax方法(超簡單)
- javascript實(shí)現(xiàn)原生ajax的幾種方法介紹
- 詳談 Jquery Ajax異步處理Json數(shù)據(jù).
- AJAX跨域請(qǐng)求json數(shù)據(jù)的實(shí)現(xiàn)方法
- 用ajax動(dòng)態(tài)加載需要的js文件
- 原生 JS Ajax,GET和POST 請(qǐng)求實(shí)例代碼
- js每隔5分鐘執(zhí)行一次ajax請(qǐng)求的實(shí)現(xiàn)方法
- JavaScript讀二進(jìn)制文件并用ajax傳輸二進(jìn)制流的方法
- ajax的json傳值方式在jsp頁面中的應(yīng)用
- 純js封裝的ajax功能函數(shù)與用法示例
相關(guān)文章
如何利用jQuery post傳遞含特殊字符的數(shù)據(jù)
在jquery中,解決數(shù)據(jù)傳遞處理的方法我們通常利用$.ajax或$.post,但是這里這里通常不能傳遞特殊字符,比如說:“<”,本文就幫大家解決如何傳遞這種含特殊字符的數(shù)據(jù),感興趣的朋友一起看下吧2015-10-10配合AJAX天氣預(yù)報(bào)的webService 之a(chǎn)sp
配合AJAX天氣預(yù)報(bào)的webService 之a(chǎn)sp...2007-01-01ajax 動(dòng)態(tài)傳遞jsp等頁面使用id辨識(shí)傳遞對(duì)象
本文為大家介紹下使用ajax動(dòng)態(tài)傳遞jsp等頁面,js的jax編寫,使用id辨識(shí)傳遞對(duì)象2014-01-01AJAX實(shí)現(xiàn)仿Google Suggest效果
AJAX實(shí)現(xiàn)仿Google Suggest效果...2007-07-07ajax實(shí)現(xiàn)session不過期(避免頁面過期的現(xiàn)象)
在寫博客時(shí)要寫好長時(shí)間但沒有出現(xiàn)這種情況并且有實(shí)時(shí)的自動(dòng)保存;這就涉及到了session的過期時(shí)間問題,下面與大家分享下具體的實(shí)現(xiàn)方法2013-06-06AJAX中同時(shí)發(fā)送多個(gè)請(qǐng)求XMLHttpRequest對(duì)象處理方法
AJAX中同時(shí)發(fā)送多個(gè)請(qǐng)求XMLHttpRequest對(duì)象處理方法...2007-04-04