jQuery.ajax()方法中參數詳細解析
前言
在項目開發中,為了實現非同步向服務端發起請求,最經常使用的就是jQuery.ajax方法了。剛開始需求比較簡單,調用jQuery.ajax方法時要傳的參數也就那幾個常見的參數:url/data/dataType/type/cache/timeout。當時感覺這個介面使用起來很簡單,直到最近項目中要實現一個發送 formData資料到服務端的需求時,我發現自己錯了。。。。原來jQuery.ajax方法中除了我用過的那幾個外,還有如此之多!!於是我決定要去jQuery官網好好看看都有哪些我不知道的參數!
參數解析
jQuery.ajax( )方法中的參數可以分為2類:
一類是ajax事件(local events)處理函數相關的參數:包括success/error/beforeSend/complete,這些參數都比較好理解,本文不會進行討論,若有興趣,請參考我另一篇文章《 jquery中ajax的相關事件匯總》;
另一類是與Ajax請求密切相關的參數,這是本文我想重點和大家解析的參數。
注意:這些參數都是選擇性參數,如果你沒有自己手動設定這些參數,jquery 會使用這些參數的預設值。
1、url
預設值:當前頁面的 url
類型:string(字串)
含義:ajax 請求發送的目的地址(服務端地址)
2、type
預設值:’GET’
類型:string(字串)
含義:請求的方式,可取值為”POST”, “GET”, “PUT”,”HEADER”等
3、data
預設值:無
類型:PlainObject or String or Array
含義:發送給服務端的資料。
預設情況下,jQuery會在發送之前將data處理為 query string 的格式如“key1=value1&key2=value2“(因為 contentType預設值為‘application/x-www-form-urlencoded;charset=UTF-8’);
若不想要 jQuery進行自動轉換(將 data 轉換為contentType所指定的格式),則可以通過設定processData=false ,這樣 jQuery就不會對 data 進行格式處理了。
4、dataFilter
類型:function(data,type)
含義:對服務端返回的響應資料做進一步的過濾處理
5、accepts
預設值:dataType參數的值
類型:plainObject(簡單對象)
含義:用戶端告訴服務端自己能接收那些類型的響應資料
(如何使用???)
6、async
預設值:true
類型:boolean(布爾值)
含義:表明該 ajax 請求是非同步還是同步。非同步表示一旦發出這個請求
同步表示發出請求後,程式將暫停等待服務端響應,後面的代碼將被阻塞。
直到接收到服務端響應後才繼續執行後面的代碼。
只需將 async 設定為 false,但由於此用法將阻塞瀏覽器,所以並不建議使用;
注意:跨域ajax請求和 dataType:jsonp的ajax請求中,不支援同步ajax請求
7、cache
預設值:true(但當 dataType為‘jsonp’或者‘script’時,cache預設值將為false)
類型:boolean(布爾值)
含義:當 cache 為 false 時,瀏覽器將不會緩衝請求回來的 pages。當然若你請求的‘jsonp’或者‘script’時,瀏覽器將預設不緩衝。
注意:只有對HEADER/GET類型的ajax請求設定 cache為 false 才有效。
(對於其他類型的ajax請求該參數是不需要的???)
8、contentType:
預設值:’application/x-www-form-urlencoded;charset=UTF-8’
類型:Boolean或String(布爾值/字串)
含義:此參數用在用戶端向服務端發送資料時(包括get、post)。contentType告訴了服務端‘用戶端所發送資料的類型’,以協助服務端解析資料。若你發送的資料不是contentType指定的類型資料,則 jQuery會自動將資料轉換成contentType指定的類型。
將contentType設定為 false,jQuery將不會在HTTP頭部添加contentType欄位。
注意:
1、若顯式設定了該參數,則不管有沒有資料,該 ajax 請求都會被發送。
2、用戶端發送的資料charset只能是 UTF-8,即使你改成其他值,它還是會使用 UTF-8。
3、對於跨域請求,當contentType不是‘application/x-www-form-urlencoded’, ‘multipart/form-data’, or ‘text/plain’時,瀏覽器都會先發一個 OPTIONS 請求給服務端,然後才發我們要發的 Ajax 請求。
9、dataType
預設值:無
類型:string 字串
含義:你想要接收的資料類型,若ajax 請求中顯式設定了該參數,但服務端返回的資料類型不是dataType指定的類型時,jQuery將會自動將返回資料處理為 dataType的格式。預設情況下該參數沒有設定,則 jQuery會根據 response 的 contentType Header來處理返回的資料(相當於將contenType作為 dataType) 。
dataType的值直接影響 success 成功回呼函數的 data 參數:
dataType=’xml’:
jQuery會將返回資料處理為 XMLDocument 對象,此時data為 XMLDocument 對象 ,可以用 DOM API對 data直接操作;
通過 jqXHR.responseXML可以擷取到;
dataType=’html’或‘text’:
jQuery不會對返回資料做任何處理,data 為純文字,不能使用DOM API對 data直接操作;
通過 jqXHR.responseText可以擷取到;
dataType=’json’:
jQuery會將返回資料處理為javascript對象, data 為javascript對象。若返回的資料為空白將會報錯,當無資料返回時應該返回null或者{};
通過 jqXHR.responseJSON可以擷取到;
dataType=’script’:
jQuery不會對返回資料做任何處理,data 為純文字。
但在 jQuery將資料傳遞給成功回調前,會先執行script 文本;
dataType=’jsonp’:
預設情況下(即沒有顯式設定 jsonp 參數時)jQuery會自動在請求 URL末尾添加“callback=?”;
服務端會返回 javascript 文本資料,jQuery會將其轉換為 json 資料;
在將 json 資料傳遞給成功回呼函數之前,jQuery會執行這些 javascript,同時也會調用 jsonpCallback回呼函數;
你會發現:其實返回的資料類型就2大類:XML和文本(json 類型的資料也是字串文本),所以ajax請求的響應只分為2種:responseText和responseXML
10、global
預設值:true
類型:boolean布爾值
含義:決定該ajax請求是否會觸發ajax 的 global事件如 ajaxStop/ajaxStart。當 ajax請求為跨域的 script請求或 JSONP請求,則 global 自動被設定為 false;
11、headers
預設值:{}
類型:plainObject簡單對象
含義:在請求header中添加額外的頭部欄位。
注意:該參數添加的頭部欄位可以在beforeSend方法中進行覆蓋
12、ifModified
預設值:false
類型:boolean 布爾值
含義:當該參數為false時,jQuery將不會檢查響應 header 的Last-Modified和etag欄位;當為 true 時,jQuery則會檢查這2個欄位看資料是否有變化,有變化才觸發 success 回調。
13、processData
預設值:true
類型:boolean 布爾值
含義:若此參數設定為true時,jQuery會將data參數的值處理為contentType參數所指定的格式類型。contentType的預設值為’application/x-www-form-urlencoded;charset=UTF-8’,所以當data參數值為 object 或 array 類型時,jQuery會將 data 資料自動轉換為符合’application/x-www-form-urlencoded;charset=UTF-8’格式的資料(即 query string 類型)。當你要發送DOMDocument或者formData時,則應該將processData置為 false,以避免 jQuery對data做自動格式轉換處理。
14、statusCode
預設值:{}
類型:plainObject
含義:定義了針對各個HTTP響應狀態代碼的回呼函數。執行個體如下:
$.ajax({ statusCode: { 404: function() { alert( page not found ); } }});
15、timeout
預設值:無
類型: number (單位:毫秒)
含義:定義了 ajax 請求逾時的時間。從ajax請求發送出去算起,經過了timeout指定的時間後,ajax 請求還未返回,則會觸發 jquery ajax的 error 事件(原生的 XMLHttpRequest則會觸發 ontimeout事件)。
16、context
預設值:ajax setting對象(是.ajaxSetting和傳給.ajax的 setting 參數兩者合并後的對象)
類型: 對象
含義:指代 ajax各種回調處理函數中的 this 。樣本如下:
$.ajax({ url: test.html, context: document.body}).done(function() { $( this ).addClass( done );//此時的this指的是body對象});
17、mimeType
預設值:無
類型: string
含義:功能與原生的 XMLHttpRequest.overrideMimeType( )一樣,用來覆蓋服務端所返回資料的 MIME 類型。比如你想將返回的資料當做‘text/xml’來處理和解析,即使服務端沒有指定,則只需要將mimeType置為‘text/xml’。