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

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

預處理script類型

$.ajax() 調用不同類型的響應,被傳遞到成功處理函數之前,會經過不同種類的預處理(prefilters)。

預處理的類型取決于由更加接近默認的 Content-Type 響應,但可以明確使用 dataType 選項進行設置。如果提供了 dataType 選項, 響應的 Content-Type 頭信息將被忽略。

有效的數據類型是 text, html, xml, json,jsonp,和 script

dataType:預期服務器返回的數據類型。如果不指定,jQuery 將自動根據 HTTP 包 MIME 信息來智能判斷,比如 XML MIME 類型就被識別為 XML。在1.4中,JSON 就會生成一個 JavaScript 對象,而 script 則會執行這個腳本。隨后服務器端返回的數據會根據這個值解析后,傳遞給回調函數。

script 類型

$.ajax({
    type     : "GET",
    url      : "test.js",
    dataType : "script",
    complete: function(jqXHR, status) {
        console.log(jqXHR, status)
    }
});

根據 API 的說明可知,如果 dataType 類型為 script 的時候,需要處理。

  1. 執行腳本
  2. 內容當作純文本返回
  3. 默認情況下不會通過在 URL 中附加查詢字符串變量 "_=[TIMESTAMP]" 進行自動緩存結果,除非設置了 cache 參數為 true
  4. 在遠程請求時(不在同一個域下),所有 POST 請求都將轉為GET請求。(因為將使用 DOM 的 script 標簽來加載)

針對上述四點,我們看看處理的流程。

inspectPrefiltersOrTransports(prefilters,s,options,jqXHR)

此時的 dataType 類型就會經過對應的預處理 ajaxPrefilter("script"),其中 s.cache (默認: true, dataType 為 "script" 和 "jsonp" 時默認為 false)。

jQuery.ajaxPrefilter("script", function(s) {
    if (s.cache === undefined) {
        s.cache = false;
    }
    if (s.crossDomain) {
        s.type = "GET";
    }
});

預處理的處理就是將其緩存為設置為 false ,瀏覽器將不緩存此頁面,這將在請求的 URL 的查詢字符串中追加一個時間戳參數,以確保每次瀏覽器下載的腳本被重新請求,工作原理是在 GET 請求參數中附加" _={timestamp} "在請求的地址后面加一個時間戳。

if (s.cache === false) {
    s.url = rts.test(cacheURL) ?
    // If there is already a '_' parameter, set its value
    cacheURL.replace(rts, "$1_=" + ajax_nonce++) :
    // Otherwise add one to the end
    cacheURL + (ajax_rquery.test(cacheURL) ? "&" : "?") + "_=" + ajax_nonce++;
}

此時的 s.url = "test.js?_=1402362401890",該參數不是其他請求所必須的,除了在 IE8 中,當一個 POST 請求一個已經用 GET 請求過的 URL。

我們可以參考下右邊的簡單的調試。

任務

?不會了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

  • · 粉絲專屬優惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

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

舉報

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

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?