AJAX的基本概念

來源:互聯網
上載者:User

AJAX的基本概念

是構建網頁的一種綜合使用JavaScript和XML的技術。

其實質是HTML網頁的非同步傳輸技術:

表現形式:在等待網頁的傳輸過程中,使用者依然可以和系統進行互動。

好處:頁面不用重新整理就可以更新內容。

 

典型的流程:

1.      用戶端出發非同步作業

2.      建立新的XMLHttpRequest對象。

3.      與Server進行串連

4.      伺服器端進行串連處理

5.      返回包含處理結果的XML文檔

6.      XMLHttpRequest對象接收處理結果並分析

7.      更新頁面

 

XMLHttpRequest對象:

是一個瀏覽器內建的對象,通過它提起對伺服器端的請求,可以通過javascript提起請求,如果要提起多個請求,就需要多個XHR對象。

這個請求在提起的時候,不會重新整理頁面,在後台運行。

請求的結果被預先定義好的方法(javacript)來處理。

 

例子程式:

對使用者名稱進行檢查:

 

1.用戶端的觸發

<tr>

<td
class="altbg1"width="21%">使用者名稱:</td>

<td
class="altbg2"><inputid="userid"name="username"size="25"maxlength="25"type="text"onblur="validate()">

<spanid="usermsg"></span>

</tr>

 

要注意,使用的是onblur事件,onblur 事件會在對象失去焦點時發生。

onblur="validate()" 是在對象失去焦點時發生的事件。

 

 

    varreq;//定義全域變數

    functionvalidate()
{

       var
idField =document.getElementById("userid"); //擷取當前需要傳遞的頁面元素

       varurl =
"Validate.jsp?id="+ escape(idField.value); //通過validate頁面來相應請求,id就是傳遞的值。escape是個特殊函數,可以把傳遞的值,轉換成為url的特殊編碼。比如空格可以轉成%20

不同的瀏覽器,使用不同的方式來建立並初始化XHRequest對象。

       if(window.XMLHttpRequest){ 
//netscope瀏覽器

           req =new
XMLHttpRequest();

       } else if(window.ActiveXObject)
{ //

           req =new
ActiveXObject("Microsoft.XMLHTTP");//IE瀏覽器

       }

       //開啟這個對象,本例當中,使用get方式來開啟,給定的網址:url,true的意思是使用非同步模式。第一個參數,可以是get,post,put,delete,第二個參數,是需要送到的地址。第三個就是看,是否是非同步模式。true為非同步模式,false為同步模式。

       req.open("GET", url,true);

//readyState是XHR的狀態。

0為uninitialized未初始化,

1為loading請求還沒有發到用戶端,只是建立的串連,

2為loaded,請求已經發送到用戶端,並得到了http頭部資訊。

3為interactive,伺服器提交的內容正在取得之中,

4為completed。已經取完了,伺服器處理完畢。onreadystatechange,就是說當狀態變化的時候,就調用callback方法。

 

//callback為調用的方法。注意callback不要帶括弧。

       req.onreadystatechange = callback;

//通過send把請求提交到伺服器端

       req.send(null);

    }

 

 

下面我們來寫callback方法:

    functioncallback()
{

       if(req.readyState == 4){ //真正的完成

           if(req.status == 200){ //sever的正確反饋

              //alert(req.responseText);//彈窗方式。

//反饋回來的是一個xml,如下代碼解析xml。把xml文檔當成一個對象傳遞過來,從對象當中,以TagName來取得相應的元素

              varmsg = req.responseXML.getElementsByTagName("msg")[0];

              //alert(msg);//msg本身是一個object。

//調用另外一個function,setMsg()

              
setMsg(msg.childNodes[0].nodeValue);

           }

       }

    }

 

下面我們來寫setMsg();

    functionsetMsg(msg)
{

       //alert(msg);

       mdiv = document.getElementById("usermsg");

       if(msg =="invalid")
{

           mdiv.innerHTML ="<font color='red'>usernameexists</font>";

       } else {

           mdiv.innerHTML ="<font color='green'>congratulations! you canuse this username!</font>";

       }

    }

Server處理方式:

Server處理請求的方式不變, 輸出什麼都沒關係,都可以直接輸出語句。

<%

response.setContentType("text/xml");

response.setHeader("Cache-Control","no-store");
//HTTP1.1 阻止瀏覽器進行緩衝

response.setHeader("Pragma","no-cache");
//HTTP1.0 阻止瀏覽器進行緩衝

response.setDateHeader("Expires", 0);//prevents catching at proxy server
阻止瀏覽器進行緩衝

System.out.println(request.getParameter("id"));

//check the database

response.getWriter().write("<msg>valid</msg>");

%>

 

相關文章

聯繫我們

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