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

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

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

    即使世界明天毀滅,我也要在今天種下我的葡萄樹(shù)。
    posts - 112, comments - 14, trackbacks - 0, articles - 11

    掌握 Ajax,第 1 部分: Ajax 簡(jiǎn)介

    Posted on 2006-07-28 15:13 閱讀(215) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java

    五年前,如果不知道 XML,您就是一只無(wú)人重視的丑小鴨。十八個(gè)月前,Ruby 成了關(guān)注的中心,不知道 Ruby 的程序員只能坐冷板凳了。 今天,如果想跟上最新的技術(shù)時(shí)尚,那您的目標(biāo)就是 Ajax。

    但是,Ajax 不僅僅 是一種時(shí)尚,它是一種構(gòu)建網(wǎng)站的強(qiáng)大方法,而且不像學(xué)習(xí)一種全新的語(yǔ)言那樣困難。

    但在詳細(xì)探討 Ajax 是什么之前,先讓我們花幾分鐘了解 Ajax 什么。目前,編寫(xiě)應(yīng)用程序時(shí)有兩種基本的選擇:

    • 桌面應(yīng)用程序
    • Web 應(yīng)用程序

    兩者是類(lèi)似的,桌面應(yīng)用程序通常以 CD 為介質(zhì)(有時(shí)候可從網(wǎng)站下載)并完全安裝到您的計(jì)算機(jī)上。桌面應(yīng)用程序可能使用互聯(lián)網(wǎng)下載更 新,但運(yùn)行這些應(yīng)用程序的代碼在桌面計(jì)算機(jī)上。Web 應(yīng)用程序運(yùn)行在某處的 Web 服務(wù)器上 —— 毫不奇怪,要通過(guò) Web 瀏覽器訪(fǎng)問(wèn)這種應(yīng) 用程序。

    不過(guò),比這些應(yīng)用程序的運(yùn)行代碼放在何處更重要的是,應(yīng)用程序如何運(yùn)轉(zhuǎn)以及如何與其進(jìn)行交互。桌面應(yīng)用程序一般很快(就在您的計(jì)算 機(jī)上運(yùn)行,不用等待互聯(lián)網(wǎng)連接),具有漂亮的用戶(hù)界面(通常和操作系統(tǒng)有關(guān))和非凡的動(dòng)態(tài)性。可以單擊、選擇、輸入、打開(kāi)菜單和子菜 單、到處巡游,基本上不需要等待。

    另一方面,Web 應(yīng)用程序是最新的潮流,它們提供了在桌面上不能實(shí)現(xiàn)的服務(wù)(比如 Amazon.com 和 eBay)。但是,伴隨著 Web 的強(qiáng)大而 出現(xiàn)的是等待,等待服務(wù)器響應(yīng),等待屏幕刷新,等待請(qǐng)求返回和生成新的頁(yè)面。

    顯然這樣說(shuō)過(guò)于簡(jiǎn)略了,但基本的概念就是如此。您可能已經(jīng)猜到,Ajax 嘗試建立桌面應(yīng)用程序的功能和交互性,與不斷更新的 Web 應(yīng)用 程序之間的橋梁。可以使用像桌面應(yīng)用程序中常見(jiàn)的動(dòng)態(tài)用戶(hù)界面和漂亮的控件,不過(guò)是在 Web 應(yīng)用程序中。

    還等什么呢?我們來(lái)看看 Ajax 如何將笨拙的 Web 界面轉(zhuǎn)化成能迅速響應(yīng)的 Ajax 應(yīng)用程序吧。

    老技術(shù),新技巧

    在談到 Ajax 時(shí),實(shí)際上涉及到多種技術(shù),要靈活地運(yùn)用它必須深入了解這些不同的技術(shù)(本系列的頭幾篇文章將分別討論這些技術(shù))。好 消息是您可能已經(jīng)非常熟悉其中的大部分技術(shù),更好的是這些技術(shù)都很容易學(xué)習(xí),并不像完整的編程語(yǔ)言(如 Java 或 Ruby)那樣困難。

    Ajax 的定義

    順便說(shuō)一下,Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的縮寫(xiě)。這個(gè)短語(yǔ)是 Adaptive Path 的 Jesse James Garrett 發(fā)明的(請(qǐng)參閱 參考資料),按照 Jesse 的解釋?zhuān)@不是 個(gè)首字母縮寫(xiě)詞。

    下面是 Ajax 應(yīng)用程序所用到的基本技術(shù):

    • HTML 用于建立 Web 表單并確定應(yīng)用程序其他部分使用的字段。
    • JavaScript 代碼是運(yùn)行 Ajax 應(yīng)用程序的核心代碼,幫助改進(jìn)與服務(wù)器應(yīng)用程序的通信。
    • DHTML 或 Dynamic HTML,用于動(dòng)態(tài)更新表單。我們將使用 divspan 和其他動(dòng)態(tài) HTML 元素來(lái)標(biāo)記 HTML。
    • 文檔對(duì)象模型 DOM 用于(通過(guò) JavaScript 代碼)處理 HTML 結(jié)構(gòu)和(某些情況下)服務(wù)器返回的 XML。

    我們來(lái)進(jìn)一步分析這些技術(shù)的職責(zé)。以后的文章中我將深入討論這些技術(shù),目前只要熟悉這些組件和技術(shù)就可以了。對(duì)這些代碼越熟悉,就 越容易從對(duì)這些技術(shù)的零散了解轉(zhuǎn)變到真正把握這些技術(shù)(同時(shí)也真正打開(kāi)了 Web 應(yīng)用程序開(kāi)發(fā)的大門(mén))。

    XMLHttpRequest 對(duì)象

    要了解的一個(gè)對(duì)象可能對(duì)您來(lái)說(shuō)也是最陌生的,即 XMLHttpRequest。這是一個(gè) JavaScript 對(duì)象,創(chuàng)建該對(duì)象很簡(jiǎn)單,如清單 1 所示。


    清單 1. 創(chuàng)建新的 XMLHttpRequest 對(duì)象
    												
    
    <script language="javascript" type="text/javascript">
    var xmlHttp = new XMLHttpRequest();
    </script>
    
    										

    下一期文章中將進(jìn)一步討論這個(gè)對(duì)象,現(xiàn)在要知道這是處理所有服務(wù)器通信的對(duì)象。繼續(xù)閱讀之前,先停下來(lái)想一想:通過(guò) XMLHttpRequest 對(duì)象與服務(wù)器進(jìn)行對(duì)話(huà)的是 JavaScript 技術(shù)。這不是一般的應(yīng)用程序流,這恰恰是 Ajax 的強(qiáng)大功能 的來(lái)源。

    在一般的 Web 應(yīng)用程序中,用戶(hù)填寫(xiě)表單字段并單擊 Submit 按鈕。然后整個(gè)表單發(fā)送到服務(wù)器,服務(wù)器將它轉(zhuǎn)發(fā)給處理表單的腳 本(通常是 PHP 或 Java,也可能是 CGI 進(jìn)程或者類(lèi)似的東西),腳本執(zhí)行完成后再發(fā)送回全新的頁(yè)面。該頁(yè)面可能是帶有已經(jīng)填充某些數(shù)據(jù) 的新表單的 HTML,也可能是確認(rèn)頁(yè)面,或者是具有根據(jù)原來(lái)表單中輸入數(shù)據(jù)選擇的某些選項(xiàng)的頁(yè)面。當(dāng)然,在服務(wù)器上的腳本或程序處理和返 回新表單時(shí)用戶(hù)必須等待。屏幕變成一片空白,等到服務(wù)器返回?cái)?shù)據(jù)后再重新繪制。這就是交互性差的原因,用戶(hù)得不到立即反饋,因此感覺(jué) 不同于桌面應(yīng)用程序。

    Ajax 基本上就是把 JavaScript 技術(shù)和 XMLHttpRequest 對(duì)象放在 Web 表單和服務(wù)器之間。當(dāng)用戶(hù)填寫(xiě)表單時(shí),數(shù) 據(jù)發(fā)送給一些 JavaScript 代碼而不是 直接發(fā)送給服務(wù)器。相反,JavaScript 代碼捕獲表單數(shù)據(jù)并向服務(wù)器發(fā)送請(qǐng)求。同時(shí)用戶(hù)屏幕 上的表單也不會(huì)閃爍、消失或延遲。換句話(huà)說(shuō),JavaScript 代碼在幕后發(fā)送請(qǐng)求,用戶(hù)甚至不知道請(qǐng)求的發(fā)出。更好的是,請(qǐng)求是異步發(fā)送的 ,就是說(shuō) JavaScript 代碼(和用戶(hù))不用等待服務(wù)器的響應(yīng)。因此用戶(hù)可以繼續(xù)輸入數(shù)據(jù)、滾動(dòng)屏幕和使用應(yīng)用程序。

    然后,服務(wù)器將數(shù)據(jù)返回 JavaScript 代碼(仍然在 Web 表單中),后者決定如何處理這些數(shù)據(jù)。它可以迅速更新表單數(shù)據(jù),讓人感覺(jué)應(yīng) 用程序是立即完成的,表單沒(méi)有提交或刷新而用戶(hù)得到了新數(shù)據(jù)。JavaScript 代碼甚至可以對(duì)收到的數(shù)據(jù)執(zhí)行某種計(jì)算,再發(fā)送另一個(gè)請(qǐng)求, 完全不需要用戶(hù)干預(yù)!這就是 XMLHttpRequest 的強(qiáng)大之處。它可以根據(jù)需要自行與服務(wù)器進(jìn)行交互,用戶(hù)甚至可以完全不知道 幕后發(fā)生的一切。結(jié)果就是類(lèi)似于桌面應(yīng)用程序的動(dòng)態(tài)、快速響應(yīng)、高交互性的體驗(yàn),但是背后又擁有互聯(lián)網(wǎng)的全部強(qiáng)大力量。

    加入一些 JavaScript

    得到 XMLHttpRequest 的句柄后,其他的 JavaScript 代碼就非常簡(jiǎn)單了。事實(shí)上,我們將使用 JavaScript 代碼完成非常 基本的任務(wù):

    • 獲取表單數(shù)據(jù):JavaScript 代碼很容易從 HTML 表單中抽取數(shù)據(jù)并發(fā)送到服務(wù)器。
    • 修改表單上的數(shù)據(jù):更新表單也很簡(jiǎn)單,從設(shè)置字段值到迅速替換圖像。
    • 解析 HTML 和 XML:使用 JavaScript 代碼操縱 DOM(請(qǐng)參閱 下一節(jié)),處理 HTML 表單服務(wù)器返回的 XML 數(shù)據(jù)的 結(jié)構(gòu)。

    對(duì)于前兩點(diǎn),需要非常熟悉 getElementById() 方法,如 清單 2 所示。


    清單 2. 用 JavaScript 代碼捕獲和設(shè)置字段值
    												
    
    // Get the value of the "phone" field and stuff it in a variable called phone
    var phone = document.getElementById("phone").value;
    
    // Set some values on a form using an array called response
    document.getElementById("order").value = response[0];
    document.getElementById("address").value = response[1];
    
    										

    這里沒(méi)有特別需要注意的地方,真是好極了!您應(yīng)該認(rèn)識(shí)到這里并沒(méi)有非常復(fù)雜的東西。只要掌握了 XMLHttpRequest,Ajax 應(yīng)用程序的其他部分就是如 清單 2 所示的簡(jiǎn)單 JavaScript 代碼了,混合有少量的 HTML。同時(shí),還要用一點(diǎn)兒 DOM ,我們就來(lái)看看吧。

    以 DOM 結(jié)束

    最后還有 DOM,即文檔對(duì)象模型。可能對(duì)有些讀者來(lái)說(shuō) DOM 有點(diǎn)兒令人生畏,HTML 設(shè)計(jì)者很少使用它,即使 JavaScript 程序員也不大用 到它,除非要完成某項(xiàng)高端編程任務(wù)。大量使用 DOM 的 復(fù)雜的 Java 和 C/C++ 程序,這可能就是 DOM 被認(rèn)為難以學(xué)習(xí)的原因。

    幸運(yùn)的是,在 JavaScript 技術(shù)中使用 DOM 很容易,也非常直觀。現(xiàn)在,按照常規(guī)也許應(yīng)該說(shuō)明如何使用 DOM,或者至少要給出一些示例 代碼,但這樣做也可能誤導(dǎo)您。即使不理會(huì) DOM,仍然能深入地探討 Ajax,這也是我準(zhǔn)備采用的方法。以后的文章將再次討論 DOM,現(xiàn)在只要 知道可能需要 DOM 就可以了。當(dāng)需要在 JavaScript 代碼和服務(wù)器之間傳遞 XML 和改變 HTML 表單的時(shí)候,我們?cè)偕钊胙芯?DOM。沒(méi)有它也 能做一些有趣的工作,因此現(xiàn)在就把 DOM 放到一邊吧。







    獲取 Request 對(duì)象

    有了上面的基礎(chǔ)知識(shí)后,我們來(lái)看看一些具體的例子。XMLHttpRequest 是 Ajax 應(yīng)用程序的核心,而且對(duì)很多讀者來(lái)說(shuō)可能 還比較陌生,我們就從這里開(kāi)始吧。從 清單 1 可以看出,創(chuàng)建和使用這個(gè)對(duì)象非常簡(jiǎn)單,不是嗎?等一等。

    還記得幾年前的那些討厭的瀏覽器戰(zhàn)爭(zhēng)嗎?沒(méi)有一樣?xùn)|西在不同的瀏覽器上得到同樣的結(jié)果。不管您是否相信,這些戰(zhàn)爭(zhēng)仍然在繼續(xù),雖然 規(guī)模較小。但令人奇怪的是,XMLHttpRequest 成了這場(chǎng)戰(zhàn)爭(zhēng)的犧牲品之一。因此獲得 XMLHttpRequest 對(duì)象可能 需要采用不同的方法。下面我將詳細(xì)地進(jìn)行解釋。

    使用 Microsoft 瀏覽器

    Microsoft 瀏覽器 Internet Explorer 使用 MSXML 解析器處理 XML(可以通過(guò) 參考資料 進(jìn)一步了解 MSXML )。因此如果編寫(xiě)的 Ajax 應(yīng)用程序要和 Internet Explorer 打交道,那么必須用一種特殊的方式創(chuàng)建對(duì)象。

    但并不是這么簡(jiǎn)單。根據(jù) Internet Explorer 中安裝的 JavaScript 技術(shù)版本不同,MSXML 實(shí)際上有兩種不同的版本,因此必須對(duì)這兩種 情況分別編寫(xiě)代碼。請(qǐng)參閱 清單 3,其中的代碼在 Microsoft 瀏覽器上創(chuàng)建了一個(gè) XMLHttpRequest


    清單 3. 在 Microsoft 瀏覽器上創(chuàng)建 XMLHttpRequest 對(duì)象
    												
    
    var xmlHttp = false;
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
        xmlHttp = false;
      }
    }
    
    										

    您對(duì)這些代碼可能還不完全理解,但沒(méi)有關(guān)系。當(dāng)本系列文章結(jié)束的時(shí)候,您將對(duì) JavaScript 編程、錯(cuò)誤處理、條件編譯等有更深的了解 。現(xiàn)在只要牢牢記住其中的兩行代碼:

    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

    這兩行代碼基本上就是嘗試使用一個(gè)版本的 MSXML 創(chuàng)建對(duì)象,如果失敗則使用另一個(gè)版本創(chuàng)建該對(duì)象。不錯(cuò)吧?如果都不成功,則將 xmlHttp 變量設(shè)為 false,告訴您的代碼出現(xiàn)了問(wèn)題。如果出現(xiàn)這種情況,可能是因?yàn)榘惭b了非 Microsoft 瀏覽器,需要使用 不同的代碼。

    處理 Mozilla 和非 Microsoft 瀏覽器

    如果選擇的瀏覽器不是 Internet Explorer,或者為非 Microsoft 瀏覽器編寫(xiě)代碼,就需要使用不同的代碼。事實(shí)上就是 清單 1 所示的一行簡(jiǎn)單代碼:


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费观看男人吊女人视频| 国产精品黄页免费高清在线观看| 久久久久久成人毛片免费看| 亚洲人成网亚洲欧洲无码久久| 精品一区二区三区免费观看| 亚洲欧洲精品成人久久曰影片 | 人人公开免费超级碰碰碰视频 | 久久久久久久久亚洲 | 波多野结衣免费在线| 亚洲第一页在线观看| 久久免费看黄a级毛片| 91在线手机精品免费观看| 免费在线观看日韩| 免费国产va在线观看| 亚洲中文字幕丝袜制服一区| 久久精品成人免费国产片小草| 亚洲欧洲国产精品香蕉网| 久久久久国产精品免费看| 亚洲白色白色永久观看| 国产人在线成免费视频| 久久久久亚洲av无码尤物| 麻豆高清免费国产一区| 亚洲伊人久久大香线蕉AV| 一本久久综合亚洲鲁鲁五月天| 亚洲自国产拍揄拍| 97无码人妻福利免费公开在线视频 | 三年在线观看免费观看完整版中文| 中文字幕亚洲乱码熟女一区二区 | 亚洲国产成a人v在线观看| 国内大片在线免费看| 国产男女爽爽爽免费视频| 亚洲一区二区成人| 免费无码不卡视频在线观看| 国产精品免费视频观看拍拍| 久久亚洲sm情趣捆绑调教| 国产在线19禁免费观看| 久久中文字幕免费视频| 综合一区自拍亚洲综合图区 | 亚洲短视频男人的影院| 国产免费AV片无码永久免费| 免费网站看av片|