亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

章節
問答
課簽
筆記
評論
占位
占位

類型轉化器

什么是類型轉化器?

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 可將課程添加到書簽

邀請您關注公眾號
關注后,及時獲悉本課程動態

舉報

0/150
提交
取消
全部 精華 我要發布
全部 我要發布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?