日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

什么是 AJAX, what is AJAX(一)

發(fā)布時(shí)間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是 AJAX, what is AJAX(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

AJAX全稱為「Asynchronous JavaScript and XML」(非同步JavaScript和XML),是一種創(chuàng)建互動(dòng)式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。它使用:

  • 使用XHTML+CSS來(lái)表示信息;
  • 使用JavaScript操作DOM Document Object Model進(jìn)行動(dòng)態(tài)顯示及交互;
  • 使用 XMLXSLT 進(jìn)行數(shù)據(jù)交換及相關(guān)操作;
  • 使用 XMLHttpRequest對(duì)象與Web伺服器進(jìn)行非同步數(shù)據(jù)交換;
  • 使用 JavaScript 將所有的東西綁定在一起。

參見(jiàn)Ajax的提出者Jesse James Garrett的英文原文中文譯文

類(lèi)似於DHTML或LAMP,AJAX不是指一種單一的技術(shù),而是有機(jī)地利用了一系列相關(guān)的技術(shù)。事實(shí)上,一些基於AJAX的「派生/合成」式(derivative/composite)的技術(shù)正在出現(xiàn),如「AFLAX」。

AJAX的應(yīng)用使用支持以上技術(shù)的web瀏覽器作為運(yùn)行平臺(tái)。這些瀏覽器目前包括:MozillaFirefoxInternet ExplorerOperaKonqueror及Mac OS的Safari。但是Opera不支持XSL格式對(duì)象,也不支持XSLT[1]

與傳統(tǒng)的web應(yīng)用比較

傳統(tǒng)的web應(yīng)用允許用戶端填寫(xiě)表單(form),當(dāng)提交表單時(shí)就向web伺服器發(fā)送一個(gè)請(qǐng)求。伺服器接收並處理傳來(lái)的表單,然後送回一個(gè)新的網(wǎng)頁(yè)。這個(gè)做法浪費(fèi)了許多頻寬,因?yàn)樵谇搬醿蓚€(gè)頁(yè)面中的大部分HTML代碼往往是相同的。由於每次應(yīng)用的交互都需要向伺服器發(fā)送請(qǐng)求,應(yīng)用的響應(yīng)時(shí)間就依賴於伺服器的響應(yīng)時(shí)間。這導(dǎo)致了用戶界面的響應(yīng)比本地應(yīng)用慢得多。

與此不同,AJAX應(yīng)用可以僅向伺服器發(fā)送並取回必需的數(shù)據(jù),它使用SOAP或其它一些基於XML的頁(yè)面服務(wù)介面,併在客戶端採(cǎi)用JavaScript處理來(lái)自伺服器的響應(yīng)。因?yàn)樵谒欧骱蜑g覽器之間交換的數(shù)據(jù)大量減少(大約只有原來(lái)的5%),結(jié)果我們就能看到響應(yīng)更快的應(yīng)用。同時(shí)很多的處理工作可以在發(fā)出請(qǐng)求的客戶端機(jī)器上完成,所以Web伺服器的處理時(shí)間也減少了。

[編輯]

發(fā)展史

該技術(shù)在1998年前後得到了應(yīng)用。允許客戶端腳本發(fā)送HTTP請(qǐng)求(XMLHTTP)的第一個(gè)組件由Outlook Web Access小組寫(xiě)成。該組件原屬於微軟Exchange Server,並且迅速地成為了Internet Explorer 4.0[2]的一部分。部分觀察家認(rèn)為,Outlook Web Access是第一個(gè)應(yīng)用了Ajax技術(shù)的成功的商業(yè)應(yīng)用程序,併成為包括Oddpost的網(wǎng)路郵件產(chǎn)品在內(nèi)的許多產(chǎn)品的領(lǐng)頭羊。但是,2005年初,許多事件使得Ajax被大眾所接受。Google在它著名的交互應(yīng)用程序中使用了非同步通訊,如Google討論組Google地圖Google搜索建議Gmail等。Ajax這個(gè)詞由《Ajax: A New Approach to Web Applications》一文所創(chuàng),該文的迅速流傳提高了人們使用該項(xiàng)技術(shù)的意識(shí)。另外,對(duì)Mozilla/Gecko的支持使得該技術(shù)走向成熟,變得更為易用。

[編輯]

優(yōu)點(diǎn)、前提和批評(píng)

使用Ajax的最大優(yōu)點(diǎn)就是能在不更新整個(gè)頁(yè)面的前提下維護(hù)數(shù)據(jù)。這使得Web應(yīng)用程序更為迅捷地響應(yīng)用戶交互,並避免了在網(wǎng)路上發(fā)送那些沒(méi)有改變的信息。

Ajax不需要任何瀏覽器插件,但需要用戶允許JavaScript在瀏覽器上執(zhí)行。就像DHTML應(yīng)用程序那樣,Ajax應(yīng)用程序必須在眾多不同的瀏覽器和平臺(tái)上經(jīng)過(guò)嚴(yán)格的測(cè)試。隨著Ajax的成熟,一些簡(jiǎn)化Ajax使用方法的程序庫(kù)也相繼問(wèn)世。同樣,也出現(xiàn)了另一種輔助程序設(shè)計(jì)的技術(shù),為那些不支持JavaScript的用戶提供替代功能。

對(duì)應(yīng)用Ajax最主要的批評(píng)就是,它可能破壞瀏覽器後退按鈕的正常行為(參見(jiàn)Jakob Nielsen's的《1999年Web設(shè)計(jì)新錯(cuò)誤前10名》)。在動(dòng)態(tài)更新頁(yè)面的情況下,用戶無(wú)法回到前一個(gè)頁(yè)面狀態(tài),因?yàn)闉g覽器僅能記憶歷史記錄中的靜態(tài)頁(yè)面。一個(gè)被完整讀入的頁(yè)面與一個(gè)已經(jīng)被動(dòng)態(tài)修改過(guò)的頁(yè)面之間的差別非常微妙;用戶通常會(huì)希望單擊後退按鈕能夠取消他們的前一次操作,但是在Ajax應(yīng)用程序中,這將無(wú)法實(shí)現(xiàn)。開(kāi)發(fā)者們想出了種種辦法來(lái)解決這個(gè)問(wèn)題,大多數(shù)都是在用戶單擊後退按鈕訪問(wèn)歷史記錄時(shí),通過(guò)創(chuàng)建或使用一個(gè)隱藏的IFRAME來(lái)重現(xiàn)頁(yè)面上的變更。(例如,當(dāng)用戶在Google Maps中單擊後退時(shí),它在一個(gè)隱藏的IFRAME中進(jìn)行搜索,然後將搜索結(jié)果反映到Ajax元素上,以便將應(yīng)用程序狀態(tài)恢復(fù)到當(dāng)時(shí)的狀態(tài)。)

一個(gè)相關(guān)的觀點(diǎn)認(rèn)為,使用動(dòng)態(tài)頁(yè)面更新使得用戶難於將某個(gè)特定的狀態(tài)保存到收藏夾中。該問(wèn)題的解決方案也已出現(xiàn),大部分都使用URL片斷標(biāo)識(shí)符(通常被稱為錨點(diǎn),即URL中#後面的部分)來(lái)保持跟蹤,允許用戶回到指定的某個(gè)應(yīng)用程序狀態(tài)。(許多瀏覽器允許JavaScript動(dòng)態(tài)更新錨點(diǎn),這使得Ajax應(yīng)用程序能夠在更新顯示內(nèi)容的同時(shí)更新錨點(diǎn)。)這些解決方案也同時(shí)解決了許多關(guān)於不支持後退按鈕的爭(zhēng)論。

進(jìn)行Ajax開(kāi)發(fā)時(shí),網(wǎng)路延遲——即用戶發(fā)出請(qǐng)求到伺服器發(fā)出響應(yīng)之間的間隔——需要慎重考慮。不給予用戶明確的回應(yīng)[3],沒(méi)有恰當(dāng)?shù)念A(yù)讀數(shù)據(jù)[4],或者對(duì)XMLHttpRequest的不恰當(dāng)處理[5],都會(huì)使用戶感到延遲,這是用戶不希望看到的,也是他們無(wú)法理解的。[6]通常的解決方案是,使用一個(gè)可視化的組件來(lái)告訴用戶系統(tǒng)正在進(jìn)行後臺(tái)操作並且正在讀取數(shù)據(jù)和內(nèi)容。

[編輯]

開(kāi)發(fā)Ajax應(yīng)用面臨的挑戰(zhàn)及解決方案

對(duì)程序員而言,開(kāi)發(fā)Ajax應(yīng)用最頭痛的問(wèn)題莫過(guò)於以下幾點(diǎn):

  • Ajax在本質(zhì)上是一個(gè)瀏覽器端的技術(shù),首先面臨無(wú)可避免的第一個(gè)問(wèn)題即是瀏覽器的相容性問(wèn)題。各家瀏覽器對(duì)於JavaScript/DOM/CSS的支援總有部分不太相同或是有Bug,甚至同一瀏覽器的各個(gè)版本間對(duì)於JavaScript/DOM/CSS的支援也有可能部分不一樣。這導(dǎo)致程序員在寫(xiě)Ajax應(yīng)用時(shí)花大部分的時(shí)間在調(diào)試瀏覽器的相容性而非在應(yīng)用程序本身。因此,目前大部分的Ajax程序庫(kù)或開(kāi)發(fā)框架大多以js程序庫(kù)的形式存在,以定義更高階的JavaScript API 、JavaScript對(duì)象(模板)、或者JavaScript Widgets來(lái)解決此問(wèn)題。如prototype.js。
  • Ajax技術(shù)之主要目的在於局部交換客戶端及伺服器間之?dāng)?shù)據(jù)。如同傳統(tǒng)之主從架構(gòu),無(wú)可避免的會(huì)有部分的業(yè)務(wù)邏輯會(huì)實(shí)現(xiàn)在客戶端,或部分在客戶端部分在伺服器。由於業(yè)務(wù)邏輯可能分散在客戶端及伺服器,且以不同之程式語(yǔ)言實(shí)現(xiàn),這導(dǎo)致Ajax應(yīng)用程式極難維護(hù)。如有使用者介面或業(yè)務(wù)邏輯之更動(dòng)需求,再加上前一個(gè)JavaScript/DOM/CSS之相容性問(wèn)題,Ajax應(yīng)用往往變成程序員的夢(mèng)靨。針對(duì)業(yè)務(wù)邏輯分散的問(wèn)題,Ajax開(kāi)發(fā)框架大致可分為兩類(lèi):
    • 將業(yè)務(wù)邏輯及表現(xiàn)層放在瀏覽器,數(shù)據(jù)層放在伺服器:因?yàn)樗械某淌揭訨avaScript執(zhí)行在客戶端,只有需要數(shù)據(jù)時(shí)才向伺服器要求服務(wù),此法又稱為胖客戶端(fat client)架構(gòu)。伺服器在此架構(gòu)下通常僅用於提供及儲(chǔ)存數(shù)據(jù)。此法的好處在於程序員可以充分利用JavaScript搭配業(yè)務(wù)邏輯來(lái)做出特殊的使用者介面,以符合終端使用者的要求。但是問(wèn)題也不少,主因在第一,JavaScript語(yǔ)言本身之能力可能不足以處理複雜的業(yè)務(wù)邏輯。第二,JavaScript的執(zhí)行效能一向不好。第三,JavaScript存取伺服器數(shù)據(jù),仍需適當(dāng)?shù)乃欧鞫顺绦蛑浜稀5谒?#xff0c;瀏覽器相容性的問(wèn)題又出現(xiàn)。有些Ajax開(kāi)發(fā)框架如DWR企圖以自動(dòng)生成JavaScript之方式來(lái)避免相容的問(wèn)題,並開(kāi)立通道使得JavaScript可以直接叫用伺服器端的Java程序來(lái)簡(jiǎn)化數(shù)據(jù)的存取。但是前述第一及第二兩個(gè)問(wèn)題仍然存在,程序員必須費(fèi)相當(dāng)?shù)牧獠拍苓_(dá)到應(yīng)用程序之規(guī)格要求,或可能根本無(wú)法達(dá)到要求。
    • 將表現(xiàn)層、業(yè)務(wù)邏輯、及數(shù)據(jù)層放在伺服器,瀏覽器僅有使用者介面引擎(User Interface engine);此法又稱為瘦客戶端(thin client)架構(gòu),或中心伺服器(server-centric)架構(gòu)。瀏覽器的使用者介面引擎僅用於反映伺服器的表現(xiàn)層以及傳達(dá)使用者的輸入回到伺服器的表現(xiàn)層。由瀏覽器所觸發(fā)之事件亦送回伺服器處理,根據(jù)業(yè)務(wù)邏輯來(lái)更新表現(xiàn)層,然後反映回瀏覽器。因?yàn)樗袘?yīng)用程序完全在伺服器執(zhí)行,數(shù)據(jù)及表現(xiàn)層皆可直接存取,程序員只需使用伺服器端相對(duì)較成熟之程序語(yǔ)言(如Java語(yǔ)言)即可,不需再學(xué)習(xí)JavaScript/DOM/CSS,在開(kāi)發(fā)應(yīng)用程序時(shí)相對(duì)容易。缺點(diǎn)在於使用者介面引擎以及表現(xiàn)層通常以標(biāo)準(zhǔn)組件的形式存在,如需要特殊組件(使用者介面)時(shí),往往須待原框架之開(kāi)發(fā)者提供,緩不濟(jì)急。如開(kāi)源碼Ajax開(kāi)發(fā)框架ZK目前支援XUL及XHTML組件,尚無(wú)XAML之支援。
  • Ajax是以非同步的方式向伺服器提交需求。對(duì)伺服器而言,其與傳統(tǒng)的提交表單需求並無(wú)不同,而且由於是以非同步之方式提交,如果同時(shí)有多個(gè)Ajax需求及表單提交需求,將無(wú)法保證哪一個(gè)需求先獲得伺服器的回應(yīng)。這會(huì)造成應(yīng)用程序典型的多程序(process)或多線程(thread)的競(jìng)爭(zhēng)(racing)問(wèn)題。程序員因此必須自行處理或在JavaScript裡面動(dòng)手腳以避免這類(lèi)競(jìng)爭(zhēng)問(wèn)題的發(fā)生(如Ajax需求未回應(yīng)之前,先disable提交按鈕),這又不必要的增加了程序員的負(fù)擔(dān)。目前已知有自動(dòng)處理此問(wèn)題之開(kāi)發(fā)框架似乎只有ZK
  • 總結(jié)

    以上是生活随笔為你收集整理的什么是 AJAX, what is AJAX(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。