<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    WEB 2.0中AJAX應用的詳細探討

    Posted on 2006-06-08 08:41 Computerboy 閱讀(947) 評論(1)  編輯  收藏 所屬分類: 隨便侃侃
    本文轉載自:http://www.smatrix.cn/bbs/htm_data/20/0603/23145.html

    最近互聯網上比較火熱的話題當然是關于WEB2.0的應用,其中AJAX又是WEB2.0的核心之一。AJAX是Asynchronous JavaScript and XML 的縮寫。它并不是一門新的語言或技術,它實際上是幾項技術
    按一定的方式組合在一在同共的協作中發揮各自的作用,它包括
      
      使用XHTML和CSS標準化呈現;
      
      使用DOM實現動態顯示和交互;
      
      使用XML和XSLT進行數據交換與處理;
      
      使用XMLHttpRequest進行異步數據讀取;
      
      最后用JavaScript綁定和處理所有數據;
      
      Ajax的工作原理相當于在用戶和服務器之間加了?個中間層,使用戶操作與服務器響應異步化。
    這樣把以前的一些服務器負擔的工作轉嫁到客戶端,利于客戶端閑置的處理能力來處理,
    減輕服務器和帶寬的負擔,從而達到節約ISP的空間及帶寬租用成本的目的。
      
      我們以兩個驗證通行證帳號是否存在的例子來講述AJAX在實際中的應用:
      
      (1)  用文本字符串的方式返回服務器的響應來驗證網易通行證帳號是否存在;
      
      (2)  以XMLDocument對象方式返回響應來驗證金山通行證帳號是否存在;
      
      首先,我們需要用JavaScript來創建XMLHttpRequest 類向服務器發送一個HTTP請求, XMLHttpRequest 類首先由Internet Explorer以ActiveX對象引入,被稱為XMLHTTP。 后來Mozilla?Netscape?Safari 和其他瀏覽器也提供了XMLHttpRequest類,
    不過它們創建XMLHttpRequest類的方法不同。
      
      對于Internet Explorer瀏覽器,創建XMLHttpRequest 方法如下:
      
      xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP.3.0"); //3.0或4.0, 5.0
      xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP");
      xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP");
      
      由于在不同Internet Explorer瀏覽器中XMLHTTP版本可能不一致,為了更好的兼容不同版本的Internet Explorer瀏覽器,因此我們需要根據不同版本的Internet Explorer瀏覽器來創建XMLHttpRequest類,上面代碼就是根據不同的Internet Explorer瀏覽器創建XMLHttpRequest類的方法。
      
      對于Mozilla?Netscape?Safari等瀏覽器,創建XMLHttpRequest 方法如下:
      
      xmlhttp_request = new XMLHttpRequest();
      
      如果服務器的響應沒有XML mime-type header,某些Mozilla瀏覽器可能無法正常工作。
    為了解決這個問題,如果服務器響應的header不是text/xml,可以調用其它方法修改該header。
      
      xmlhttp_request = new XMLHttpRequest();
      xmlhttp_request.overrideMimeType('text/xml');
      
      在實際應用中,為了兼容多種不同版本的瀏覽器,一般將創建XMLHttpRequest類的方法
    寫成如下形式:
      
      try{
      if( window.ActiveXObject ){
      for( var i = 5; i; i-- ){
      try{
      if( i == 2 ){
      xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" );
      }else{
      xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP."?? i?? ".0" );
      }
      xmlhttp_request.setRequestHeader("Content-Type","text/xml");
      xmlhttp_request.setRequestHeader("Content-Type","gb2312");
      break;}
      catch(e){
      xmlhttp_request = false;
      }
      }
      }else if( window.XMLHttpRequest ){
      xmlhttp_request = new XMLHttpRequest();
      if (xmlhttp_request.overrideMimeType) {
      xmlhttp_request.overrideMimeType('text/xml');
      }
      }
      }catch(e){
      xmlhttp_request = false;
      }
      
      在定義了如何處理響應后,就要發送請求了。可以調用HTTP請求類的open()和send()方法,
    如下所示:
      
      xmlhttp_request.open('GET', URL, true);
      xmlhttp_request.send(null);
      
      open()的第一個參數是HTTP請求方式?GET,POST或任何服務器所支持的您想調用的方式。
    按照HTTP規范,該參數要大寫;否則,某些瀏覽器(如Firefox)可能無法處理請求。
      
      第二個參數是請求頁面的URL。
      
      第三個參數設置請求是否為異步模式。如果是TRUE,JavaScript函數將繼續執行,
    而不等待服務器響應。這就是"AJAX"中的"A"。
      
      用JavaScript來創建XMLHttpRequest 類向服務器發送一個HTTP請求后,接下來要決定當收到
    服務器的響應后,需要做什么。這需要告訴HTTP請求對象用哪一個JavaScript函數處理這個響應。
    可以將對象的onreadystatechange屬性設置為要使用的JavaScript的函數名,如下所示:
      
      xmlhttp_request.onreadystatechange =FunctionName;
      
      FunctionName是用JavaScript創建的函數名,注意不要寫成FunctionName(),當然我們也可以
    直接將JavaScript代碼創建在onreadystatechange之后,例如:
      
      xmlhttp_request.onreadystatechange = function(){
      // JavaScript代碼段
      };
      
      在這個函數中。首先要檢查請求的狀態。只有當一個完整的服務器響應已經收到了,函數才
    可以處理該響應。XMLHttpRequest 提供了readyState屬性來對服務器響應進行判斷。
      
      readyState的取值如下:
      0 (未初始化)
      1 (正在裝載)
      2 (裝載完畢)
      3 (交互中)
      4 (完成)
      
      所以只有當readyState=4時,一個完整的服務器響應已經收到了,函數才可以處理該響應。
    具體代碼如下:
      
      if (http_request.readyState == 4) {
      // 收到完整的服務器響應
      } else {
      // 沒有收到完整的服務器響應
      }
      
      當readyState=4時,一個完整的服務器響應已經收到了,接著,函數會檢查HTTP服務器
    響應的狀態值。完整的狀態取值可參見W3C文檔。當HTTP服務器響應的值為200時,表示狀態正常。
      
      在檢查完請求的狀態值和響應的HTTP狀態值后,就可以處理從服務器得到的數據了。
    有兩種方式可以得到這些數據:
      
      (1)  以文本字符串的方式返回服務器的響應
      
      (2)  以XMLDocument對象方式返回響應
      
      實例一: 用文本字符串的方式返回服務器的響應來驗證網易通行證帳號是否存在
      
      首先,我們登陸網易通行證注冊頁面,可以看到檢測用戶名是否存在是將用戶名提
    交給checkssn.jsp頁面進行判斷,格式為:
      
      reg.163.com/register/checkssn.jsp?username=用戶名
      
      根據上面講到的方法,我們可以利用AJAX技術對網易通行證用戶名進行檢測:
      
      第一步:新建一個基于Xhtml標準的網頁,在<head>區域插入Javascript函數如下:
      
      <script type="text/javascript" language="javascript">
      function getXMLRequester( ){
      var xmlhttp_request = false;
      try{
      if( window.ActiveXObject ){
      for( var i = 5; i; i-- ){
      try{
      if( i == 2 ){
      xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" );
      }else{
      xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP."?? i?? ".0" );
      xmlhttp_request.setRequestHeader("Content-Type","text/xml");
      xmlhttp_request.setRequestHeader("Content-Type","gb2312");
      }
      break;}
      catch(e){
      xmlhttp_request = false;
      }
      }
      }else if( window.XMLHttpRequest ){
      xmlhttp_request = new XMLHttpRequest();
      if (xmlhttp_request.overrideMimeType) {
      xmlhttp_request.overrideMimeType('text/xml');
      }
      }
      }catch(e){
      xmlhttp_request = false;
      }
      return xmlhttp_request ;
      }
      
      function IDRequest(n) {//定義收到服務器的響應后需要執行的JavaScript函數
      url=n document.getElementById('163id').value;//定義網址參數
      xmlhttp_request=getXMLRequester();//調用創建XMLHttpRequest的函數
      xmlhttp_request.onreadystatechange = doContents;//調用doContents函數
      xmlhttp_request.open('GET', url, true);
      xmlhttp_request.send(null);
      }
      function doContents() {
      if (xmlhttp_request.readyState == 4) {// 收到完整的服務器響應
      if (xmlhttp_request.status == 200) {//HTTP服務器響應的值OK
      document.getElementById('message').innerHTML = xmlhttp_request.responseText;
      //將服務器返回的字符串寫到頁面中ID為message的區域
      } else {
      alert(http_request.status);
      }
      }
      }
      </script>
      
      在<body>區域建立一個文本框,id為163id
      
      <input type="text" id="163id" onpropertychange="IDRequest('http://reg.163.com/register/checkssn.jsp?username=')" />
      
      再建一個id為messsge的空白區域用來顯示返回字符串(也可以通過Javascript函數截取
    一部分字符串顯示):
      
      <div id="message"></div>
      
      這樣,一個基于AJAX技術的用戶名檢測頁面就做好了,不過這個頁面將返回服務器響應生成
    頁面的所有字符串,當然還可以對返回的字符串進行一些操作,便于應用到不同的需要當中。
      
      實例二: 以XMLDocument對象方式返回響應來驗證金山通行證帳號是否存在
      
      在上面的例子中,當服務器對HTTP請求的響應被收到后,我們會調用請求對象的reponseText屬性。
    該屬性包含了服務器返回響應文件的內容。現在我們以XMLDocument對象方式返回響應,
    此時將不再需要reponseText屬性而使用responseXML屬性。
      
      首先登陸金山通行證注冊頁面,我們發現金山通行證用戶名的檢測方式為:
      pass.kingsoft.com/ksgweb/jsp/login/uid.jsp?uid=用戶名,并且返回XML數據:
      
      <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
      <response>
      <method>isExistedUid</method>
      <result>-2</result>
      </response>
      
      當result值為-1時表示此用戶名已被注冊,當result值為-2時表示此用戶名尚未注冊,
    因此通過對result值的判斷可以知道用戶名是否被注冊。
      
      對上例代碼進行修改:
      
      首先找到
      
      document.getElementById('message').innerHTML = xmlhttp_request.responseText;
      
      改為:
      
      var response = xmlhttp_request.responseXML.documentElement;
      var result = response.getElementsByTagName('result')[0].firstChild.data;
    //返回result節點數據
      if(result ==-2){
      document.getElementById('message').innerHTML = "用戶名" document.getElementById('163id').value "尚未注冊";
      }
      else if(result ==-1){
      document.getElementById('message').innerHTML = "對不起,用戶名" document.getElementById('163id').value "已經注冊";
      }
      
      通過以上兩個實例說明了AJAX的客戶端基礎應用,采用的是網易和金山現成的服務器端程序,
    當然為了開發合適自己頁面的程序,還需要對自己編寫服務器端程序,這設計到程序語言及數據庫的操作,對于有一定程序基礎的讀者一定不是很難的事情,本文著重討論了客戶端AJAX的應用體驗,希望本文能夠起到拋出破磚頭引到玉的作用。

    Feedback

    # re: WEB 2.0中AJAX應用的詳細探討  回復  更多評論   

    2006-07-05 20:12 by 李昭欣
    以絕緣體火箭筒已經

    posts - 40, comments - 39, trackbacks - 0, articles - 0

    Copyright © Computerboy

    主站蜘蛛池模板: 亚洲AV无码一区二区乱子伦| 亚洲国产精品综合久久网络| 亚洲AV日韩AV永久无码下载| 在线播放免费人成视频网站| 亚洲国产成人久久一区久久| 黄色一级毛片免费| 亚洲美日韩Av中文字幕无码久久久妻妇| 国产亚洲精品2021自在线| 免费日本黄色网址| 日韩毛片免费一二三| 中文字幕亚洲激情| 免费视频一区二区| 久久精品国产亚洲AV麻豆网站 | 精品亚洲国产成人| 无码国产精品久久一区免费| 亚洲AV无码无限在线观看不卡| 免费黄色网址入口| 日本中文字幕免费看| 中文亚洲AV片不卡在线观看| a视频在线免费观看| 亚洲一区二区三区首页| 无码一区二区三区AV免费| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 久久九九免费高清视频| 久久综合九九亚洲一区| 成人免费视频69| 青青青亚洲精品国产| 亚洲国产精品久久66| 中文字幕日本人妻久久久免费| 日本久久久久亚洲中字幕| 成年在线网站免费观看无广告 | 最近免费中文字幕视频高清在线看 | 免费看大美女大黄大色| 一级做a爰性色毛片免费| 亚洲综合久久综合激情久久| 永久免费av无码不卡在线观看 | 精品在线免费视频| japanese色国产在线看免费| 女人隐私秘视频黄www免费| 久久亚洲国产精品123区| 美丽姑娘免费观看在线观看中文版 |