1.在使用XHR對象時,要調(diào)用的第一個方法是open(),它接收3個參數(shù):要發(fā)送的請求的類型、請求的URL(基于當(dāng)前頁面的相對路徑或絕對路徑)和表示是否異步發(fā)送請求的布爾值。調(diào)用open()方法并不會真正發(fā)送請求,而只是啟動一個請求以備發(fā)送。
只能向同一個域中使用相同端口和協(xié)議的URL發(fā)送請求。如果URL與啟動請求的頁面有任何差別,都會引發(fā)安全錯誤。
2.要發(fā)送特定請求,必須調(diào)用send()方法。該方法接收一個參數(shù),即要作為請求主體發(fā)送的數(shù)據(jù)。如果不需要通過請求主體發(fā)送數(shù)據(jù),則必須傳入null,因為這個參數(shù)對有些瀏覽器來說是必須的。
3.若ajax請求是同步的,則JavaScript代碼會等到服務(wù)器響應(yīng)之后再繼續(xù)執(zhí)行。
4.在接收到服務(wù)器返回的響應(yīng)后,響應(yīng)的數(shù)據(jù)會自動填充XHR對象,相關(guān)的屬性簡介如下:
(1)responseText:作為響應(yīng)主體返回的文本。
(2)responseXML
(3)status:響應(yīng)的HTTP狀態(tài)碼。
(4)statusText:HTTP狀態(tài)的說明。
5.若ajax請求是異步的,則必須要通過XHR的readystatechange事件監(jiān)聽readyState屬性的值。這里有兩個值得注意的地方,一是onreadystatechange事件處理程序必須在open()方法前指定。二是onreadystatechange事件處理程序內(nèi)部不應(yīng)使用this對象(兼容性問題)。
6.在接收到響應(yīng)之前還可以調(diào)用abort()方法來取消異步請求。
7.XHR對象的setRequestHeader()方法可以設(shè)置自定義的請求頭部信息。要成功發(fā)送請求頭部信息,必須在調(diào)用open()方法后切調(diào)用send()方法前調(diào)用此方法。(建議使用自定義的頭部字段名稱,不要使用瀏覽器正常發(fā)送的字段名稱,否則有可能會影響服務(wù)器的響應(yīng))
8.調(diào)用XHR對象的getRequestHeader()方法并傳入頭部字段名稱,可以取得相應(yīng)的響應(yīng)頭部信息。而調(diào)用getAllRequestHeaders()方法則可以取得一個包含所有頭部信息的長字符串。
9.POST請求是吧數(shù)據(jù)作為請求的主體提交,而get請求傳統(tǒng)上不是這樣的。發(fā)送給post請求第一步是在open()方法中在第一個參數(shù)位置傳入"post",第二步是向send()方法中傳入數(shù)據(jù)。
10.可以使用XHR來模仿表單提交:將Content-Type頭部信息設(shè)置為application/x-www-form-urlencoded,也就是表單提交時的內(nèi)容類型,其次是以適當(dāng)?shù)母袷絼?chuàng)建一個字符串(第14章介紹的serialize()函數(shù))。
11.FormData類型用于便捷地將表單數(shù)據(jù)序列化。
12.progress事件常用于創(chuàng)建進度指示器。
13.CORS(跨域資源共享)定義了在必須訪問跨域資源時,瀏覽器與服務(wù)器應(yīng)該如何溝通。CORS背后的基本思想,就是使用自定義的HTTP頭部讓瀏覽器與服務(wù)器進行溝通,從而決定請求或響應(yīng)是應(yīng)該成功還是應(yīng)該失敗。
14.ie通過XDR對象、其他瀏覽器通過XHR對象實現(xiàn)CORS。
15.JSONP(JSON with padding)由兩部分組成:回調(diào)函數(shù)和數(shù)據(jù)?;卣{(diào)函數(shù)是響應(yīng)到來時應(yīng)該在頁面中調(diào)用的函數(shù)?;卣{(diào)函數(shù)的名字一般是在請求中指定。而數(shù)據(jù)就是傳入回調(diào)函數(shù)中的JSON數(shù)據(jù)。下面是一個典型的JSONP請求:
`http://freegeoip.net/json/?callback=handleResponse`
JSONP是通過動態(tài)script元素來使用的。
16.Comet是一種服務(wù)器向頁面推送數(shù)據(jù)的技術(shù)。Comet能夠讓信息近乎實時地被推送到頁面上,非常適合處理體育比賽的比分和股票報價。有兩種實現(xiàn)Comet的方式:長輪詢和流。
17.短輪詢是指瀏覽器定時向服務(wù)器發(fā)送請求,看有沒有更新的數(shù)據(jù)。長輪詢同樣也是由瀏覽器發(fā)起請求,然后服務(wù)器一直保持連接打開,知道有數(shù)據(jù)可發(fā)送。發(fā)送完數(shù)據(jù)后,瀏覽器關(guān)閉連接,隨即又發(fā)起一個到服務(wù)器的新請求。
18.HTTP流在頁面的整個生命周期內(nèi)只使用一個HTTP連接。具體來說就是瀏覽器向服務(wù)器發(fā)送一個請求,而服務(wù)器保持連接打開,然后周期性地向瀏覽器發(fā)送數(shù)據(jù)。在IE以外的瀏覽器中,通過偵聽readystatechange事件以及檢測readystate的值是否為3,就可以利用XHR對象實現(xiàn)HTTP流。
19.SSE(服務(wù)器發(fā)送事件)是圍繞只讀Comet交互推出的API或者模式。SSE支持短輪詢、長輪詢、HTTP流,而且能在斷開連接時自動確定何時重新連接。(IE不支持SSE)
20.SSE中要預(yù)訂新的事件流,首先要創(chuàng)建一個新的EventSource對象,并傳入一個入口點。
`var source = new EventSource('myevents.php');`
注意,傳入的URL必須與創(chuàng)建對象的頁面同源。
21.EventSource的實例有一個readyState屬性,值為0表示正在連接到服務(wù)器,值為1表示打開了連接,值為2表示關(guān)閉了連接。另外還有以下三個事件:
(1)open:在建立連接時觸發(fā)。
(2)message:在從服務(wù)器接收到新事件時觸發(fā)。
(3)error:在無法建立連接時觸發(fā)。
一般用法如下:
~~~
source.onmessage = function(e){
var data = e.data;
//處理數(shù)據(jù)
};
~~~
22. 要創(chuàng)建Web Socket,先實例一個WebSocket對象并傳入要連接的URL:
`var socket = new WebSocket("ws://www.example.com/server.php");`
注意,必須給WebSocket構(gòu)造函數(shù)傳入絕對URL。同源策略對Web Socket不實用,因此可以通過它打開任何站點的連接。至于是否會與某個域中的頁面通信,則完全取決于服務(wù)器。
23.實例化了WebSocket對象后,瀏覽器會馬上嘗試創(chuàng)建連接。與XHR類似,WebSocket也有一個表示當(dāng)前狀態(tài)的readyState屬性。
要關(guān)閉Web Socket連接,可以在任何時候調(diào)用close()方法。
24.Web Socket通過send()方法發(fā)送數(shù)據(jù),通過message事件監(jiān)聽接收數(shù)據(jù)。
25.Web Socket常用于聊天室;在不能使用Web Socket的情況下,組合XHR和SSE也是能實現(xiàn)雙向通信的。
- 第一章 JavaScript簡介
- 第二章 在HTML中使用JavaScript
- 第三章 基本概念
- 第四章 變量、作用域和內(nèi)存問題
- 第五章 引用類型
- 第六章 面向?qū)ο蟮某绦蛟O(shè)計
- 第七章 函數(shù)表達式
- 第八章 BOM
- 第九章 客戶端檢測
- 第十章 DOM
- 第十一章 DOM擴展
- 第十二章 DOM2和DOM3
- 第十三章 事件
- 第十四章 表單腳本
- 第十六章 HTML5腳本程序
- 第十七章 錯誤處理與調(diào)試
- 第二十章 JSON
- 第二十一章 AJAX和Comet
- 第二十二章 高級技巧
- 第二十三章 離線應(yīng)用與客戶端存儲
- 第二十四章 最佳實踐
- 第二十五章 新興的API
