前端必備——js中前端與後臺的數據交互全解

只要編程語言可以支持網卡端口的監聽和發送,理論上都是能夠實現服務器後臺設計的。也所以形成了實現後臺的語言偏多,而web前端語言以html/css/js爲主。因此在這裏咱們不涉及後臺的設計,只介紹在web前端設計中前端數據的發送和後臺數據的接收。css

純粹的前端工程師已經不存在了,作前端開發必需要了解必要的後臺、數據庫知識,以及與後臺的交互設計,其中你須要知道的名詞包括JSON、AJAX、序列化、推送、comet、SSE、WebSocket。html

JSON前端

js對象web

key和value間用冒號鏈接,不一樣的key-value鍵值對之間用逗號鏈接,最後一個value後不加符號。ajax

json對象數據庫

json對象與js對象的對象字面量的區別在於屬性必須加引號。編程

JSON中對象能夠嵌套。每一個JSON對象使用{}包含。toJSON函數是對象序列化時調用的虛函數。json

json數組數組

JSON數組,每個元素都是json對象。瀏覽器

json對象操做

json對象與js對象操做方法相同,也是支持屬性的增刪查改操做。

json數組操做

json數組與js數組操做方法相同

序列化

將js對象、json對象、json數組轉化json字符串。

JSON.stringify將對象(js的或JSON的)轉化爲JSON字符串(稱爲序列化)。能夠序列化對象或對象數組。會自動濾出值爲underfined的屬性。

JSON.stringify函數第二個參數是過濾器,表示只保留name和age兩個屬性,也能夠以函數做爲過濾器。第三個參數是換行縮進,可爲數字縮進空格數目,最大縮進爲10,可爲字符串,表示縮進字符串。

調用stringify,執行順序:toJSON虛函數或對象自己->函數過濾器->存在屬性進行序列化->縮進參數進行格式化。

反序列化

將json字符串轉化爲json對象、json數組。

JSON.parse將字符串轉化爲js對象或數組,可使用函數控制轉化操做。

Ajax

Ajax的核心是XmlHttpRequest。咱們經過對該對象的操做來進行異步的數據請求。jQuey中使用.ajax,.post等,Angular中使用$http。

建立XHR對象

狀態變化事件

onreadystatechange()狀態變化函數。readyState的取值0爲未初始化,未調用open,1已open未send,2已send未回覆,3回覆部分,4所有回覆。在後臺使用推送機制的話,前端會間斷的收到推送數據,狀態爲3。responseText包含曾經的全部推送數據,因此每次讀取應該根據舊數據長度查找最新的數據的位置。

響應完成事件

不管什麼響應,接收完成就觸發。

響應異常事件

進度事件

lengthComputable表示進度信息是否可用,position表示已接收數,totalSize表示預期接收數。

請求初始化

opet()準備啓動請求,參數:請求類型post或get,請求地址,是否異步發送。同步的話會等待程序返回方可繼續。

發送請求

發送請求,若是是同步,會直到響應完畢纔會繼續運行。參數:請求主體。xhr.abort()取消異步請求。

獲取響應

responseText返回數據,responseXML在響應類型爲text/xml和application/xml時返回XML的響應數據。getResponseHeader讀取服務器返回在自定義頭部信息。statusText表示HTTP狀態描述,各瀏覽器不一樣。

超時函數

請求數據序列化

FormData對象序列化表單,也能夠經過new FormData(),建立空的對象。append添加鍵值對,能夠在包含file的表單中直接添加文件。

comet

Ajax的出現使客戶端與服務器端傳輸數據少了不少,但仍是基於http協議,沒法擺脫http協議要求的請求/響應的模式。對於某些須要及時更新的推送通知業務,人們便提出了「反向Ajax」。

Comet的實現主要有兩種方式,基於Ajax的長輪詢(long-polling)方式和基於 Iframe 及 htmlfile 的流(http streaming)方式。而這些大部分功能在後臺完成,前端要作的就是經過ajax請求成功後,在XMLHttpRequest的onreadystatechange函數中持續獲取數據。

SSE

SSE是一種容許服務端向客戶端推送新數據的HTML5技術。與由客戶端每隔幾秒從服務端輪詢拉取新數據相比,這是一種更優的解決方案。

EventSource對象參數爲入口點,必須與建立對象的頁面同源(url模式,域、端口)。鏈接斷開會自動創建,或者使用source.close()強制斷開。open事件在鏈接創建時觸發,message事件在接收到新數據時觸發,error事件在沒法創建鏈接時觸發。推送數據保存在event.data中。

WebSocket

Websocket是一個全新的、獨立的協議,基於TCP協議,與http協議兼容、卻不會融入http協議。他被設計出來的目的就是要取代輪詢和 Comet 技術。

總結

相關文章
相關標籤/搜索