AJAX準備知識:JSON
JSON 指的是 JavaScript 對象表示法(JavaScript Object Notation)
JSON 是輕量級的文本資料交換格式
JSON 獨立于語言 *
JSON 具有自我描述性,更易了解
* JSON 使用 JavaScript 文法來描述資料對象,但是 JSON 仍然獨立于語言和平台。JSON 解析器和 JSON 庫支援許多不同的程式設計語言。
啥都别多說了,上圖吧!
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwkzX39GZhh2csATMflHLwEzX4xSZz91ZsADMx8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PnVGcq5CZlF2Y2UmM4YjY5YDN0EmZ0EzY0MWYxcDM2gDO1YWN18CX0EzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.jpeg)
合格的json對象:
不合格的json對象:
JavaScript中關于JSON對象和字元串轉換的兩個方法:
JSON.parse(): 用于将一個 JSON 字元串轉換為 JavaScript 對象
JSON.stringify(): 用于将 JavaScript 值轉換為 JSON 字元串。
JSON 格式于2001年由 Douglas Crockford 提出,目的就是取代繁瑣笨重的 XML 格式。
JSON 格式有兩個顯著的優點:書寫簡單,一目了然;符合 JavaScript 原生文法,可以由解釋引擎直接處理,不用另外添加解析代碼。是以,JSON迅速被接受,已經成為各大網站交換資料的标準格式,并被寫入ECMAScript 5,成為标準的一部分。
XML和JSON都使用結構化方法來标記資料,下面來做一個簡單的比較。
用XML表示中國部分省市資料如下:
XML格式資料
JSON格式資料
由上面的兩端代碼可以看出,JSON 簡單的文法格式和清晰的層次結構明顯要比 XML 容易閱讀,并且在資料交換方面,由于 JSON 所使用的字元要比 XML 少得多,可以大大得節約傳輸資料所占用得帶寬。
AJAX簡介
AJAX(Asynchronous Javascript And XML)翻譯成中文就是“異步Javascript和XML”。即使用Javascript語言與伺服器進行異步互動,傳輸的資料為XML(當然,傳輸的資料不隻是XML)。
同步互動:用戶端發出一個請求後,需要等待伺服器響應結束後,才能發出第二個請求;
異步互動:用戶端發出一個請求後,無需等待伺服器響應結束,就可以發出第二個請求。
AJAX除了異步的特點外,還有一個就是:浏覽器頁面局部重新整理;(這一特點給使用者的感受是在不知不覺中完成請求和響應過程)
示例:
頁面輸入兩個整數,通過AJAX傳輸到後端計算出結果并傳回。
HTML部分代碼
views.py
urls.py
搜尋引擎根據使用者輸入的關鍵字,自動提示檢索關鍵字。
還有一個很重要的應用場景就是注冊時候的使用者名的查重。
其實這裡就使用了AJAX技術!當檔案框發生了輸入變化時,使用AJAX技術向伺服器發送一個請求,然後伺服器會把查詢到的結果響應給浏覽器,最後再把後端傳回的結果展示出來。
整個過程中頁面沒有重新整理,隻是重新整理頁面中的局部位置而已!
當請求發出後,浏覽器還可以進行其他操作,無需等待伺服器的響應!
當輸入使用者名後,把光标移動到其他表單項上時,浏覽器會使用AJAX技術向伺服器送出請求,伺服器會查詢名為lemontree7777777的使用者是否存在,最終伺服器傳回true表示名為lemontree7777777的使用者已經存在了,浏覽器在得到結果後顯示“使用者名已被注冊!”。
整個過程中頁面沒有重新整理,隻是局部重新整理了;
在請求發出後,浏覽器不用等待伺服器響應結果就可以進行其他操作;
AJAX使用JavaScript技術向伺服器發送異步請求;
AJAX請求無須重新整理整個頁面;
因為伺服器響應内容不再是整個頁面,而是頁面中的部分内容,是以AJAX性能高;
jQuery實作的AJAX
最基本的jQuery發送AJAX請求示例:
data參數中的鍵值對,如果值值不為字元串,需要将其轉換成字元串類型。
通過擷取隐藏的input标簽中的csrfmiddlewaretoken值,放置在data中發送。
通過擷取傳回的cookie中的字元串 放置在請求頭中發送。
注意:需要引入一個jquery.cookie.js插件。
或者用自己寫一個getCookie方法:
每一次都這麼寫太麻煩了,可以使用$.ajaxSetup()方法為ajax請求統一設定。
更多細節詳見:Djagno官方文檔中關于CSRF的内容
在系統資料庫單中,當使用者填寫了使用者名後,把光标移開後,會自動向伺服器發送異步請求。伺服器傳回這個使用者名是否已經被注冊過。
頁面中給出系統資料庫單;
在username input标簽中綁定onblur事件處理函數。
當input标簽失去焦點後擷取 username表單字段的值,向服務端發送AJAX請求;
django的視圖函數中處理該請求,擷取username值,判斷該使用者在資料庫中是否被注冊,如果被注冊了就傳回“該使用者已被注冊”,否則響應“該使用者名可以注冊”。
序列化
我們的資料中經常有日期時間,也就是datetime對象,而json.dumps是無法處理這樣在類型的,那就需要通過自定義處理器來做擴充,如下:
補充一個SweetAlert插件示例
點選下載下傳Bootstrap-sweetalert項目。