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

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

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

    posts - 189,comments - 115,trackbacks - 0
    URL
    http://book.devworld.cn/book/5


    ?
    快速業務開發平臺+在線自定義WEB報表平臺+多級數據上報解決方案

    2006年10月18日
    ?MEYEGG
    ?退出

    [?當前在線:1141,本次峰值:1179?]

    首頁 | 動態 | 文章 | FAQ? | 新聞 | 下載 | 代碼 | 工作 | 調查 | 術語 | 站點 | 圖書 | 論壇 | 幫助 | 全部??

    [?在線用戶:103,今日總量:29896?]

    TOP | 交流 | 軟件 | 專欄 | 開源 | 譯/著 | 源碼 | API? | 推薦 | FTP? | 積分 | 統計 | 搜索 | Blog | 我們??
    首頁 ? 研究文集 ? J2EE綜合評論此文章?發表評論??開始監控此文章 ?開始監控 ??加入收藏夾 ?加入收藏夾
    AJAX基礎教程
    snowsea 轉貼? (參與分:16550,專家分:1160)?? 發表:2006-04-23 14:53 ??版本:1.0 ??閱讀:810

      這篇文章將帶您瀏覽整個AJAX的基本概貌,并展示兩個簡單的例子讓您輕松上路.?

      什么是?AJAX??
      AJAX?(異步?JavaScript?和?XML)?是個新產生的術語,專為描述JavaScript的兩項強大性能.這兩項性能在多年來一直被網絡開發者所忽略,直到最近Gmail,?Google?suggest和google?Maps的橫空出世才使人們開始意識到其重要性.?

      這兩項被忽視的性能是:?
      無需重新裝載整個頁面便能向服務器發送請求.?
      對XML文檔的解析和處理.

    步驟?1???"請!"?---?如何發送一個HTTP請求

      為了用JavaScript向服務器發送一個HTTP請求,?需要一個具備這種功能的類實例.?這樣的類首先由Internet?Explorer以ActiveX對象引入,?被稱為XMLHTTP.?后來Mozilla,?Safari?和其他瀏覽器紛紛仿效,?提供了XMLHttpRequest類,它支持微軟的ActiveX對象所提供的方法和屬性.?

      因此,?為了創建一個跨瀏覽器的這樣的類實例(對象),?可以應用如下代碼:?

    if?(window.XMLHttpRequest)?{?//?Mozilla,?Safari,?...
    ????http_request?=?new?XMLHttpRequest();
    }?else?if?(window.ActiveXObject)?{?//?IE
    ????http_request?=?new?ActiveXObject("Microsoft.XMLHTTP");
    }

      (上例對代碼做了一定簡化,這是為了解釋如何創建XMLHTTP類實例.?實際的代碼實例可參閱本篇步驟3.)?

      如果服務器的響應沒有XML?mime-type?header,某些Mozilla瀏覽器可能無法正常工作.?為了解決這個問題,?如果服務器響應的header不是text/xml,可以調用其它方法修改該header.?

    http_request?=?new?XMLHttpRequest();
    http_request.overrideMimeType('text/xml');

      接下來要決定當收到服務器的響應后,需要做什么.這需要告訴HTTP請求對象用哪一個JavaScript函數處理這個響應.可以將對象的onreadystatechange屬性設置為要使用的JavaScript的函數名,如下所示:?

    http_request.onreadystatechange?=?nameOfTheFunction;?

      注意:在函數名后沒有括號,也無需傳遞參數.另外還有一種方法,可以在扉頁(fly)中定義函數及其對響應要采取的行為,如下所示:?

    http_request.onreadystatechange?=?function(){
    ????//?do?the?thing
    };

      在定義了如何處理響應后,就要發送請求了.可以調用HTTP請求類的open()和send()方法,?如下所示:?

    http_request.open('GET',?'http://www.example.org/some.file',?true);
    http_request.send(null);

      open()的第一個參數是HTTP請求方式???GET,?POST,?HEAD?或任何服務器所支持的您想調用的方式.?按照HTTP規范,該參數要大寫;否則,某些瀏覽器(如Firefox)可能無法處理請求.有關HTTP請求方法的詳細信息可參考http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html?W3C?specs?
      第二個參數是請求頁面的URL.由于自身安全特性的限制,該頁面不能為第三方域名的頁面.同時一定要保證在所有的頁面中都使用準確的域名,否則調用open()會得到"permission?denied"的錯誤提示.一個常見的錯誤是訪問站點時使用domain.tld,而當請求頁面時,卻使用www.domain.tld.?
      第三個參數設置請求是否為異步模式.如果是TRUE,?JavaScript函數將繼續執行,而不等待服務器響應.這就是"AJAX"中的"A".?
      如果第一個參數是"POST",send()方法的參數可以是任何想送給服務器的數據.?這時數據要以字符串的形式送給服務器,如下所示:?

    name=value&anothername=othervalue&so=on?


    步驟?2???"收到!"?---?處理服務器的響應?

      當發送請求時,要提供指定處理響應的JavaScript函數名.?

    http_request.onreadystatechange?=?nameOfTheFunction;?

      我們來看看這個函數的功能是什么.首先函數會檢查請求的狀態.如果狀態值是4,就意味著一個完整的服務器響應已經收到了,您將可以處理該響應.?

    if?(http_request.readyState?==?4)?{
    ????//?everything?is?good,?the?response?is?received
    }?else?{
    ????//?still?not?ready
    }

      readyState的取值如下:?
      0?(未初始化)?
      1?(正在裝載)?
      2?(裝載完畢)?
      3?(交互中)?
      4?(完成)?

      接著,函數會檢查HTTP服務器響應的狀態值.?完整的狀態取值可參見?W3C?site.?我們著重看值為200?OK的響應.?

    if?(http_request.status?==?200)?{
    ????//?perfect!
    }?else?{
    ????//?there?was?a?problem?with?the?request,
    ????//?for?example?the?response?may?be?a?404?(Not?Found)
    ????//?or?500?(Internal?Server?Error)?response?codes
    }

      在檢查完請求的狀態值和響應的HTTP狀態值后,?您就可以處理從服務器得到的數據了.有兩種方式可以得到這些數據:?

    http_request.responseText???以文本字符串的方式返回服務器的響應?
    http_request.responseXML???以XMLDocument對象方式返回響應.處理XMLDocument對象可以用JavaScript?DOM函數?


    步驟?3???"萬事俱備!"?-?簡單實例

      我們現在將整個過程完整地做一次,發送一個簡單的HTTP請求.?我們用JavaScript請求一個HTML文件,?test.html,?文件的文本內容為"I'm?a?test.".然后我們"alert()"test.html文件的內容.?

    <script?type="text/javascript"?language="javascript">
    ????var?http_request?=?false;
    ????function?makeRequest(url)?{

    ????????http_request?=?false;

    ????????if?(window.XMLHttpRequest)?{?//?Mozilla,?Safari,...
    ????????????http_request?=?new?XMLHttpRequest();
    ????????????if?(http_request.overrideMimeType)?{
    ????????????????http_request.overrideMimeType('text/xml');
    ????????????}
    ????????}?else?if?(window.ActiveXObject)?{?//?IE
    ????????????try?{
    ????????????????http_request?=?new?ActiveXObject("Msxml2.XMLHTTP");
    ????????????}?catch?(e)?{
    ????????????????try?{
    ????????????????????http_request?=?new?ActiveXObject("Microsoft.XMLHTTP");
    ????????????????}?catch?(e)?{}
    ????????????}
    ????????}

    ????????if?(!http_request)?{
    ????????????alert('Giving?up?:(?Cannot?create?an?XMLHTTP?instance');
    ????????????return?false;
    ????????}
    ????????http_request.onreadystatechange?=?alertContents;
    ????????http_request.open('GET',?url,?true);
    ????????http_request.send(null);

    ????}

    ????function?alertContents()?{

    ????????if?(http_request.readyState?==?4)?{
    ????????????if?(http_request.status?==?200)?{
    ????????????????alert(http_request.responseText);
    ????????????}?else?{
    ????????????????alert('There?was?a?problem?with?the?request.');
    ????????????}
    ????????}

    ????}
    </script>
    <span
    ????style="cursor:?pointer;?text-decoration:?underline"
    ????onclick="makeRequest('test.html')">
    ????????Make?a?request
    </span>


      本例中:?
      用戶點擊瀏覽器上的"請求"鏈接;?
      接著函數makeRequest()將被調用.其參數???HTML文件test.html在同一目錄下;?
      這樣就發起了一個請求.onreadystatechange的執行結果會被傳送給alertContents();?
      alertContents()將檢查服務器的響應是否成功地收到,如果是,就會"alert()"test.html文件的內容.?

    步驟?4???"X-文檔"?---?處理XML響應

      在前面的例子中,當服務器對HTTP請求的響應被收到后,我們會調用請求對象的reponseText屬性.該屬性包含了test.html文件的內容.現在我們來試試responseXML屬性.?

      首先,我們新建一個有效的XML文件,后面我們將使用這個文件.該文件(test.xml)源代碼如下所示:?

    <?xml?version="1.0"??>
    <root>
    ????I'm?a?test.
    </root>

      在該腳本中,我們只需修改請求部分:?

    ...
    onclick="makeRequest('test.xml')">
    ...

      接著,在alertContents()中,我們將alert()的代碼alert(http_request.responseText);換成:?

      var?xmldoc?=?http_request.responseXML;
      var?root_node?=?xmldoc.getElementsByTagName('root').item(0);
      alert(root_node.firstChild.data);



      這里,我們使用了responseXML提供的XMLDocument對象并用DOM方法獲取存于XML文件中的內容.?

    版權聲明
    本篇文章對您是否有幫助???投票: ??? ????投票結果:?? ??9???????1
    作者其它文章: 作者全部文章
    Topic: Thinking?in?AJAX?--?基于AJAX的WEB設計上一篇文章
    返回文章列表返回〔J2EE綜合〕
    下一篇文章Topic: 怎樣使用AJAX進行WEB應用程序開發

    文字廣告鏈接
    ???????自主、快速定制基于JAVA的B/S業務系統????????重量級企業在線自定義WEB報表平臺
    ???????數巨報表: 全程圖形化設計無須代碼,適合J2EE、ASP及.NET等環境,功能強大的Web報表工具
    ???????http://www.maxatx.com/
    ???????上海網域網:上海、香港、美國服務器租用 服務器托管專家

    關于 JR? |? 版權聲明? |? 聯系我們?

    ?2002-2006?JR?版權所有 滬ICP備05019622號??

    posted on 2006-10-18 11:47 MEYE 閱讀(373) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 美国毛片亚洲社区在线观看| 一个人免费视频在线观看www| 免费国产成人高清视频网站| 天堂亚洲免费视频| 亚洲综合久久成人69| 色妞WWW精品免费视频| 一个人看的hd免费视频| 亚洲永久中文字幕在线| 亚洲成av人在片观看| 99在线观看免费视频| 自拍偷自拍亚洲精品播放| 亚洲成av人影院| 免费看少妇作爱视频| 免费av一区二区三区| 亚洲欧美综合精品成人导航| 亚洲国产精品特色大片观看完整版 | 57pao国产成视频免费播放| 国产亚洲精彩视频| 久久久无码精品亚洲日韩京东传媒| 在线观看免费宅男视频| 免费福利在线视频| AV激情亚洲男人的天堂国语| 亚洲av日韩av天堂影片精品| 国产成人无码区免费A∨视频网站| 一级毛片在线观看免费| 色吊丝性永久免费看码| 国产精品亚洲综合久久| 婷婷久久久亚洲欧洲日产国码AV | 久久综合国产乱子伦精品免费| 亚洲AV无码一区二区三区电影 | 在线视频免费国产成人| 亚洲毛片免费观看| 免费看一区二区三区四区| 色婷婷六月亚洲综合香蕉| 亚洲xxxxxx| 亚洲精品午夜在线观看| 亚洲av日韩av天堂影片精品| 永久亚洲成a人片777777| 亚洲国产成人精品91久久久| 成人免费午夜无码视频| 日日麻批免费40分钟无码|