ajax是 asynchronous j**ascript and xml(以及 dhtml 等)的縮寫.
下面是 ajax 應用程式所用到的基本技術:
• html 用於建立 web 表單並確定應用程式其他部分使用的字段。
• j**ascript **是執行 ajax 應用程式的核心**,幫助改進與伺服器應用程式的通訊。
• dhtml 或 dynamic html,用於動態更新表單。我們將使用 div、span 和其他動態 html 元素來標記 html。
• 文件物件模型 dom 用於(通過 j**ascript **)處理 html 結構和(某些情況下)伺服器返回的 xml。
ajax的基本工作原理及流程
在一般的 web 應用程式中,使用者填寫表單字段並單擊 submit 按鈕。然後整個表單傳送到伺服器,伺服器將它**給處理表單的指令碼(通常是 php 或 j**a,也可能是 cgi 程序或者類似的東西),指令碼執行完成後再傳送回全新的頁面。該頁面可能是帶有已經填充某些資料的新表單的 html,也可能是確認頁面,或者是具有根據原來表單中輸入資料選擇的某些選項的頁面。當然,在伺服器上的指令碼或程式處理和返回新表單時使用者必須等待。屏 幕變成一片空白,等到伺服器返回資料後再重新繪製。這就是互動性差的原因,使用者得不到立即反饋,因此感覺不同於桌面應用程式。
ajax 基本上就是把 j**ascript 技術和xmlhttprequest
物件放在 web 表單和伺服器之間。當使用者填寫表單時,資料傳送給一些 j**ascript **而不是 直接傳送給伺服器。相反,j**ascript **捕獲表單資料並向伺服器傳送請求。同時使用者螢幕上的表單也不會閃爍、消失或延遲。換句話說,j**ascript **在幕後傳送請求,使用者甚至不知道請求的發出。更好的是,請求是非同步傳送的,就是說 j**ascript **(和使用者)不用等待伺服器的響應。因此使用者可以繼續輸入資料、滾動螢幕和使用應用程式。
然後,伺服器將資料返回 j**ascript **(仍然在 web 表單中),後者決定如何處理這些資料。它可以迅速更新表單資料,讓人感覺應用程式是立即完成的,表單沒有提交或重新整理而使用者得到了新資料。 j**ascript **甚至可以對收到的資料執行某種計算,再傳送另乙個請求,完全不需要使用者干預!這就是xmlhttprequest
的強大之處。它可以根據需要自行與伺服器進行互動,使用者甚至可以完全不知道幕後發生的一切。結果就是類似於桌面應用程式的動態、快速響應、高互動性的體驗,但是背後又擁有網際網路的全部強大力量。
xmlhttprequest 物件:
open()
:建立到伺服器的新請求。
send()
:向伺服器傳送請求.
abort()
:退出當前請求。
readystate
:提供當前 html 的就緒狀態。
status:返回當前請求的 http 狀態碼
responsetext
:伺服器返回的請求響應文字。
onreadystatechange:當請求被傳送到伺服器時,我們需要執行一些基於響應的任務。 每當 readystate 改變時,就會觸發 onreadystatechange 事件。
提供的引數參考:
支援多種瀏覽器的方式建立 xmlhttprequest 物件:
全域性變數,用於記錄xmlhttprequest物件
//建立xmlhttprequest物件的方法
ajax中的請求/響應
發出請求:ajax 應用程式中基本相同的流程:
1. 從 web 表單中獲取需要的資料。
2. 建立要連線的 url。
3. 開啟到伺服器的連線。
4. 設定伺服器在完成後要執行的函式。
5. 傳送請求。
functioncallserver()
必須知道兩點:
1.什麼也不要做,直到xmlhttp.readystate
屬性的值等於 4。
2.伺服器將把響應填充到xmlhttp.responsetext
屬性中。
響應函式:
functionupdatepage()
}
開始的**使用基本 j**ascript **獲取幾個表單字段的值。然後設定乙個 asp 指令碼作為鏈結的目標。要注意指令碼 url 的指定方式,city 和 state(來自表單)使用簡單的 get 引數附加在 url 之後。
然後開啟乙個連線,這是您第一次看到使用xmlhttprequest
。其中指定了連線方法(get)和要連線的 url。最後乙個引數如果設為true
,那麼將請求乙個非同步連線(這就是 ajax 的由來)。如果使用false
,那麼**發出請求後將等待伺服器返回的響應。如果設為true
,當伺服器在後台處理請求的時候使用者仍然可以使用表單(甚至呼叫其他 j**ascript 方法)。
xmlhttp
(要記住,這是xmlhttprequest
物件例項)的onreadystatechange
屬性可以告訴伺服器在執行完成 後(可能要用五分鐘或者五個小時)做什麼。因為**沒有等待伺服器,必須讓伺服器知道怎麼做以便您能作出響應。在這個示例中,如果伺服器處理完了請求,乙個特殊的名為updatepage()
的方法將被觸發。
最後,使用值null
呼叫send()
。因為已經在請求 url 中新增了要傳送給伺服器的資料(city 和 state),所以請求中不需要傳送任何資料。這樣就發出了請求,伺服器按照您的要求工作。
簡單總結的ajax的工作流程:
j**ascript獲得要向伺服器段傳遞的引數或變數,然後利用建立的
xmlhttprequest 物件傳送個伺服器段,如果伺服器端接受資料並返回資料,則儲存在responsetext 屬性中,最後通過j**ascript修改dom,從而實現在客戶端無重新整理的修改資料。
**:
理解ajax技術,封裝原生 ajax請求
優點 缺點 核心 工作原理 對比 1.xmlhtttprequest物件 是ajax技術 的核心 2.xhr物件 的屬性 readystate 返回 請求的狀態 數字格式 狀態 名稱描述 0uninitialized 初始化狀態 xmlhttprequest 物件已建立 或 已被 abort 方法重...
Ajax的使用及其封裝
知道了什麼是ajax,那麼我們來建立乙個ajax 建立乙個ajax物件 var xhr new xmlhttprequest 上面就是建立出的乙個ajax物件,我們就可以用這個xhr來傳送ajax請求了。接下來是ajax的請求資訊的配置,ajax請求資訊配置使用open 方法來配置的。open 的引...
ajax跨域理解
是因為存在sop 同源策略 如果ajax請求的資源如果不滿足sop,瀏覽器就是禁用掉該請求。ajax跨域請求是被阻止的?答案 瀏覽器 ajax請求的過程 ajax會將請求提交到瀏覽器,瀏覽器再與伺服器通訊。伺服器將結果返回給瀏覽器,瀏覽器會判斷伺服器響應的資料和發出的請求是不是在同乙個域下。如果是,...