js實現簡單實用的AJAX完整執行個體_AJAX相關

來源:互聯網
上載者:User

本文執行個體講述了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程式設計有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.