天天看點

AJAX

AJAX準備知識:JSON

JSON 指的是 JavaScript 對象表示法(JavaScript Object Notation)

JSON 是輕量級的文本資料交換格式

JSON 獨立于語言 *

JSON 具有自我描述性,更易了解

* JSON 使用 JavaScript 文法來描述資料對象,但是 JSON 仍然獨立于語言和平台。JSON 解析器和 JSON 庫支援許多不同的程式設計語言。

 啥都别多說了,上圖吧!

AJAX

合格的json對象:

 不合格的json對象:

AJAX
AJAX

JavaScript中關于JSON對象和字元串轉換的兩個方法:

JSON.parse(): 用于将一個 JSON 字元串轉換為 JavaScript 對象 

JSON.stringify(): 用于将 JavaScript 值轉換為 JSON 字元串。 

JSON 格式于2001年由 Douglas Crockford 提出,目的就是取代繁瑣笨重的 XML 格式。

JSON 格式有兩個顯著的優點:書寫簡單,一目了然;符合 JavaScript 原生文法,可以由解釋引擎直接處理,不用另外添加解析代碼。是以,JSON迅速被接受,已經成為各大網站交換資料的标準格式,并被寫入ECMAScript 5,成為标準的一部分。

XML和JSON都使用結構化方法來标記資料,下面來做一個簡單的比較。

用XML表示中國部分省市資料如下:

AJAX
AJAX

XML格式資料

AJAX
AJAX

JSON格式資料

由上面的兩端代碼可以看出,JSON 簡單的文法格式和清晰的層次結構明顯要比 XML 容易閱讀,并且在資料交換方面,由于 JSON 所使用的字元要比 XML 少得多,可以大大得節約傳輸資料所占用得帶寬。 

AJAX簡介

AJAX(Asynchronous Javascript And XML)翻譯成中文就是“異步Javascript和XML”。即使用Javascript語言與伺服器進行異步互動,傳輸的資料為XML(當然,傳輸的資料不隻是XML)。

同步互動:用戶端發出一個請求後,需要等待伺服器響應結束後,才能發出第二個請求;

異步互動:用戶端發出一個請求後,無需等待伺服器響應結束,就可以發出第二個請求。

AJAX除了異步的特點外,還有一個就是:浏覽器頁面局部重新整理;(這一特點給使用者的感受是在不知不覺中完成請求和響應過程)

示例:

頁面輸入兩個整數,通過AJAX傳輸到後端計算出結果并傳回。

AJAX
AJAX

HTML部分代碼

AJAX
AJAX

views.py

AJAX
AJAX

urls.py

搜尋引擎根據使用者輸入的關鍵字,自動提示檢索關鍵字。

還有一個很重要的應用場景就是注冊時候的使用者名的查重。

其實這裡就使用了AJAX技術!當檔案框發生了輸入變化時,使用AJAX技術向伺服器發送一個請求,然後伺服器會把查詢到的結果響應給浏覽器,最後再把後端傳回的結果展示出來。

整個過程中頁面沒有重新整理,隻是重新整理頁面中的局部位置而已!

當請求發出後,浏覽器還可以進行其他操作,無需等待伺服器的響應!

AJAX

當輸入使用者名後,把光标移動到其他表單項上時,浏覽器會使用AJAX技術向伺服器送出請求,伺服器會查詢名為lemontree7777777的使用者是否存在,最終伺服器傳回true表示名為lemontree7777777的使用者已經存在了,浏覽器在得到結果後顯示“使用者名已被注冊!”。

整個過程中頁面沒有重新整理,隻是局部重新整理了;

在請求發出後,浏覽器不用等待伺服器響應結果就可以進行其他操作;

AJAX使用JavaScript技術向伺服器發送異步請求;

AJAX請求無須重新整理整個頁面;

因為伺服器響應内容不再是整個頁面,而是頁面中的部分内容,是以AJAX性能高; 

jQuery實作的AJAX

最基本的jQuery發送AJAX請求示例:

AJAX
AJAX

data參數中的鍵值對,如果值值不為字元串,需要将其轉換成字元串類型。

AJAX
AJAX

通過擷取隐藏的input标簽中的csrfmiddlewaretoken值,放置在data中發送。

AJAX
AJAX

通過擷取傳回的cookie中的字元串 放置在請求頭中發送。

注意:需要引入一個jquery.cookie.js插件。

AJAX
AJAX

或者用自己寫一個getCookie方法:

AJAX
AJAX

每一次都這麼寫太麻煩了,可以使用$.ajaxSetup()方法為ajax請求統一設定。

AJAX
AJAX

更多細節詳見:Djagno官方文檔中關于CSRF的内容

在系統資料庫單中,當使用者填寫了使用者名後,把光标移開後,會自動向伺服器發送異步請求。伺服器傳回這個使用者名是否已經被注冊過。

頁面中給出系統資料庫單;

在username input标簽中綁定onblur事件處理函數。

當input标簽失去焦點後擷取 username表單字段的值,向服務端發送AJAX請求;

django的視圖函數中處理該請求,擷取username值,判斷該使用者在資料庫中是否被注冊,如果被注冊了就傳回“該使用者已被注冊”,否則響應“該使用者名可以注冊”。

序列化

我們的資料中經常有日期時間,也就是datetime對象,而json.dumps是無法處理這樣在類型的,那就需要通過自定義處理器來做擴充,如下:

AJAX
AJAX

補充一個SweetAlert插件示例

AJAX

點選下載下傳Bootstrap-sweetalert項目。

AJAX
AJAX

繼續閱讀