本文執行個體講述了js實現簡單實用的AJAX的方法。分享給大家供大家參考,具體如下:
//著作權歸屬 WUJXPING//ajax 1.2//更新2012-2-20//1、非同步資料載入可以進行載入方式get,post的設定//2、非同步同步模式的屬性設定//3、資料載入自動逾時設定//4、***資料載入事件的添加,通過事件可以進行伺服器資料的即時處理//5、增加回呼函數中使用者自訂參數this.e//6、增加ajax反覆提交控制,只需將ajax對象定義為全域變數,每次提交都會進行等待上次提交的執行結果//7、修改資料反覆提交時XmlHttp對象被反覆建立的問題//8、修複重大BUG,多個AJAX事件覆蓋問題//伺服器資料返回事件ajax.prototype.ServerEven=function(Func){ this.callback=new delegate(Func);//執行個體化}//建立非同步處理對象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"]; //根據不同的瀏覽器建立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; } //開始調用ajax.prototype.Send=function(){ if(this.isbusy)//ajax正忙 return; this.isbusy=true; var xmlhtml=this.CreateXMLHttp(); //建立對象 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; // 加隨機數防止緩衝 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"); //開啟定時進行逾時等待 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); //關閉定時器 },this.timeout); if(this.async)//非同步資料載入時狀態變化與事件掛鈎 xmlhtml.onreadystatechange=function(){//接收伺服器響應 if(xmlhtml.readyState==4){//判斷是否是完成狀態 if(xmlhtml.status==200){ //判斷是否執行成功 _this.isbusy=false; clearTimeout(timer); //關閉定時器 if(_this.callback!=null)//開始觸發伺服器事件 _this.callback.run(xmlhtml,_this.e); } } }; try{ xmlhtml.send(this.option); }catch(err){ this.isbusy=false clearTimeout(timer); //關閉定時器 alert(err); return; } if(!this.async){//同步資料載入時資料返回處理 this.isbusy=false; clearTimeout(timer); //關閉定時器 if(this.callback!=null) this.callback.run(xmlhtml,this.e); } } //建立ajax對象function ajax(url){ this.method="post";//設定資料提交方式 this.async=true;//是否進行非同步資料載入模式 this.option=""; //請求的參數 this.url=url;//請求的Url串連 this.timeout=1000*60*1;//預設逾時時間為1分鐘 this.e=null;//回調事件中使用者自訂參數 this.XmlHttp=null;//接收非同步建立的對象防止反覆建立 this.isbusy=false//擷取當前ajax的執行狀態 this.callback=null;//聲明回調事件 // 實現委託的類 delegate=function (func){ this.arr = new Array(); // 回呼函數數組 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); // 遍曆所有方法以及調用 } } } this.add(func); }}
更多關於ajax相關內容感興趣的讀者可查看本站專題:《JavaScript中ajax操作技巧總結》及《jquery中Ajax用法總結》
希望本文所述對大家ajax程式設計有所協助。