$.ajax() 調(diào)用不同類型的響應,被傳遞到成功處理函數(shù)之前,會經(jīng)過不同種類的預處理(prefilters)。
預處理的類型取決于由更加接近默認的 Content-Type 響應,但可以明確使用 dataType 選項進行設置。如果提供了 dataType 選項, 響應的 Content-Type 頭信息將被忽略。
有效的數(shù)據(jù)類型是 text, html, xml, json,jsonp,和 script
dataType:預期服務器返回的數(shù)據(jù)類型。如果不指定,jQuery 將自動根據(jù) HTTP 包 MIME 信息來智能判斷,比如 XML MIME 類型就被識別為 XML。在1.4中,JSON 就會生成一個 JavaScript 對象,而 script 則會執(zhí)行這個腳本。隨后服務器端返回的數(shù)據(jù)會根據(jù)這個值解析后,傳遞給回調(diào)函數(shù)。
script 類型
$.ajax({
type : "GET",
url : "test.js",
dataType : "script",
complete: function(jqXHR, status) {
console.log(jqXHR, status)
}
});
根據(jù) API 的說明可知,如果 dataType 類型為 script 的時候,需要處理。
針對上述四點,我們看看處理的流程。
inspectPrefiltersOrTransports(prefilters,s,options,jqXHR)
此時的 dataType 類型就會經(jīng)過對應的預處理 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 的查詢字符串中追加一個時間戳參數(shù),以確保每次瀏覽器下載的腳本被重新請求,工作原理是在 GET 請求參數(shù)中附加" _={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",該參數(shù)不是其他請求所必須的,除了在 IE8 中,當一個 POST 請求一個已經(jīng)用 GET 請求過的 URL。
我們可以參考下右邊的簡單的調(diào)試。
請驗證,完成請求
由于請求次數(shù)過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報