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 閱讀(374) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 建阳市| 阿尔山市| 东方市| 南城县| 黄石市| 延寿县| 大庆市| 大厂| 门源| 抚远县| 麟游县| 将乐县| 乡城县| 清水县| 利辛县| 永川市| 本溪市| 九江县| 文山县| 临猗县| 江阴市| 滕州市| 长寿区| 金阳县| 巴南区| 宜兰县| 吴旗县| 简阳市| 十堰市| 涡阳县| 宁蒗| 彭州市| 麻城市| 新野县| 榆社县| 贡觉县| 孙吴县| 都兰县| 德州市| 达尔| 寿光市|