[搬家文]ajax初體驗

來源:互聯網
上載者:User

最近在項目中遇到些棘手的事,常規方法解決起來頗為不易,只好動用新式武器ajax。

這個ajax我還真是頭幾次使用,不過它的魅力使我著迷。有了它,頁面向伺服器請求一些芝麻大小事的時候,終於不用把全部表單囫圇吞棗式的全部提交一次,而只要提交需要的資訊,在頁面的局部地方改變一下好了。

如果看到這篇文章的你不是編程人員,那麼想象一下那些體育網站的nba文字直播(注意是文字)吧,以前的網頁都是靜態,稍有某處不同,則整個頁面需要重新重新整理一次;而文字直播可以在其他地方完全不動的情況下,不斷滾動播出新資訊,另外比分板也會即時更新,呵呵,那就是ajax了。(滾動的比賽資訊部分,有可能用的iframe,但是比分板一定是ajax,因為我也沒有做過這方面,不好下定論)

至於ajax如何在我項目裡面應用的,就不用多說了,只是ajax最關鍵的一個東西——XMLHttpRequest的特性需要說一說。

首先要從瀏覽器擷取這個XMLHttpRequest對象,因為瀏覽器種類繁多,各瀏覽器對這個對象命名也不同,用如下代碼在跨瀏覽器時比較可靠:

 

var xmlHttp;
   try{
      xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
   }
   catch(e)
   {
      try{
       xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
      }
      catch(e){
       try{
        xmlHttp = new XMLHttpRequest();
       }
       catch(e){}
      }
   }

 

3層嵌套的try - catch,挺醜的,但實用。

擷取這個XMLHttpRequest對象了以後,就該在互動方面做點什麼了,於是

用XMLHttpRequest.open()方法可以建立一個請求,也就好比,前面的try - catch使你拿到了槍,而open()方法則是上了膛。只等發射了。 open()方法還帶4個參數,其中包括一個uri,可以指向一個action,這樣你就能靠這個action在servlet上幹任何複雜的邏輯,並返回本次請求所需的結果。有關open()方法的詳細可以在其他學習和說明文檔中找到用法。

當然不是所有槍都是上了膛就馬上發射,還得確定目標,也就是要搞清楚到底幹什麼,要殺誰。XMLHttpRequest也是。XMLHttpRequest由一個回呼函數,onreadystatechange(),在這個函數中寫好內容,當XMLHttpRequest的每一次 準備狀態(下面提到)改變,都會調用它

onreadystatechange()裡面也是慣用法

 

xmlHttp.onreadystatechange = function(){
      if(xmlHttp.readyState == 4)
      {
       if(xmlHttp.status == 200){
      document.all.filetable.deleteRow(currRow.rowIndex);//執行刪除
       }
       else{
        alert("error");
       }
      }
   }

 

readyState 是一個XMLHttpRequest的準備狀態,當它等於4的時候,說明結果已經產生並返回用戶端,隨時準備使用了,所以一般都是檢查它為4的時候,進行進一步操作。

status 是XMLHttpRequest在得到響應之後的一個狀態,200的意思是"OK",說明一切沒問題,於是可以接上實際的操作了(伺服器端的邏輯操作竊誶懊嫠 祏ri指向的action中處理,使用者瀏覽器端的顯示,就是靠這塊被兩個if包起來的地方了),一般這裡還會用到一個xmlHttp.responseText的屬性,它是由action從伺服器端返回的結果,這裡返回是null,所以沒有用到,注意的是,responseText在readyState =4時候,才是完整可用的。

最後,也是最關鍵的一步,就是xmlHttp.send(null);null 的地方還可以添一些資料,會以post方式提交。

上膛的槍,總算扣動了扳機。

(注意onreadystatechange()方法是回呼函數,不會主動執行,而send是把xmlHttp產生的請求真正提交的方法,在此後,每當xmlHttp的readystate改變,都會調用一次onreadystatechange())

PS:

接著還有一個小問題,就是javascript中的引號,javascript中對於雙引號和單引號好像都是一視同仁的,就當做是一個東西,所以每次看到javascript,總覺得裡面引號好亂。不過有個關鍵點是,在嵌套的時候,單雙引號要互動使用,而不能 " " abcd" " 或者 ' 'abcd' ',因為引號不像括弧,開始和結束的引號都是一樣的,所以" " abcd" "會被當成" " abcd" ",' 'abcd' '同理。用" 'abcd' "或 ' "abcd" '都是正確的

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.