什么是類型轉化器?
jQuery 支持不同格式的數據返回形式,比如 dataType 為 xml、json、jsonp、script、html。但是瀏覽器的 XMLHttpRequest 對象對數據的響應只有 responseText 與 responseXML 這2種,所以現在我要定義 dataType 為 jsonp,那么所得的最終數據是一個 json 的鍵值對,所以 jQuery 內部就會默認幫你完成這個轉化工作,jQuery 為了處理這種執行后數據的轉化,就引入了類型轉化器,如果沒有指定類型就依據響應頭 Content-Type 自動處理數據傳輸,服務器只能返回字符串形式的,所以如果我們 dataType 為 jsop 或者 json 的時候服務器返回的數據為:
responseText: "{"a":1,"b":2,"c":3,"d":4,"e":5}"
給轉化成:
responseJSON: Object { a: 1 b: 2 c: 3 d: 4 e: 5 }
服務器的傳輸返回的只能是 string 類型的數據,但是用戶如果通過 jQuery 的 dataType 定義了 json 的格式后,會默認把數據轉換成 Object 的形式返回,這就是 jQuery 內部做的智能處理了,jQuery 內把自定義的 dataType 與服務器返回的數據做相對應的映射處理,通過 converters 存儲對應的處理句柄,把需要類型轉換器 ajaxConvert 在服務端響應成功后,對定義在 jQuery. ajaxSettings 中的 converters 進行遍歷,找到與數據類型相匹配的轉換函數,并執行。
converters的映射
converters: { // Convert anything to text、 // 任意內容轉換為字符串 // window.String 將會在min文件中被壓縮為 a.String "* text": window.String, // Text to html (true = no transformation) // 文本轉換為HTML(true表示不需要轉換,直接返回) "text html": true, // Evaluate text as a json expression // 文本轉換為JSON "text json": jQuery.parseJSON, // Parse text as xml // 文本轉換為XML "text xml": jQuery.parseXML }
除此之外還有額外擴展的一部分 jsonp 的處理,所以其格式就是。
text –> (html,json,script)的處理了
其寓意就是服務器返回的用于只是 string 類型的文本格式,需要轉化成用戶想要的 dataType 類型的數據:
{"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML}
類型的轉化都是發生在服務器返回數據后,所以對應的就是 ajax 方法中的 done 之后,當然這個 done 方法也是經過請求分發器包裝過的,至于為什么要這樣處理,上章就已經提到過了,為了處理正常請求與 jsonp 的跨域請求的問題。
所以當 AJAX 請求完成后,會調用閉包函數 done,在 done 中判斷本次請求是否成功,如果成功就調用 ajaxConvert 對響應的數據進行類型轉換。
所以在此之前需要:
1. 正確分配 dataType 類型,如果用戶不設置(空)的情況 2. 需要轉化成 converters 映射表對應的格式比如(* text, text html , text xml , text json)
請驗證,完成請求
由于請求次數過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報