[轉載] $.ajax()詳解

前端開發不免會用到 $.ajax(),詳細整理下各參數的含義,供之後查詢參考。html

文章整合了 《https://www.cnblogs.com/tyler...》 和 《https://www.cnblogs.com/huyue...》。前端


1、$.ajax( ){ }函數格式以下:
$.ajax({
    url: "test.aspx?r=" + Math.random(),
    type: "GET",
    data: {},
    dataType: "json",
    async: false,  // 默認是true
    success: function (result) {
        var coin = result["coin"];
        var stage = result["stage"];
        document.write("金幣:" + coin + "個,身份:" + stage);
    }
});
2、參數具體含義:

1.url:
要求爲String類型的參數,(默認爲當前頁地址)發送請求的地址。jquery

2.type:
要求爲String類型的參數,請求方式(post或get)默認爲get。注意其餘http請求方法,例如put和delete也可使用,但僅部分瀏覽器支持。ajax

3.timeout:
要求爲Number類型的參數,設置請求超時時間(毫秒)。此設置將覆蓋$.ajaxSetup()方法的全局設置。json

4.async:
要求爲Boolean類型的參數,默認設置爲true,全部請求均爲異步請求。若是須要發送同步請求,請將此選項設置爲false。注意,同步請求將鎖住瀏覽器,用戶其餘操做必須等待請求完成才能夠執行。跨域

5.cache:
要求爲Boolean類型的參數,默認爲true(當dataType爲script時,默認爲false),設置爲false將不會從瀏覽器緩存中加載請求信息。數組

6.data:
要求爲Object或String類型的參數,發送到服務器的數據。若是已經不是字符串,將自動轉換爲字符串格式。本質上仍是String類型。(w3school中只說明瞭這一種類型)
get請求中,data將附加在url後。防止這種自動轉換,能夠查看processData選項。對象必須爲key/value格式,例如{foo1:"bar1",foo2:"bar2"}轉換爲&foo1=bar1&foo2=bar2。若是是數組,JQuery將自動爲不一樣值對應同一個名稱。例如{foo:["bar1","bar2"]}轉換爲&foo=bar1&foo=bar2。瀏覽器

7.dataType:
要求爲String類型的參數,預期服務器返回的數據類型,將根據該指定類型解析返回數據,若是這裏數據類型不match,好比指定json,但服務器返回的type是html,即便狀態碼是200 ok,也會走到error裏面。
若是不指定,JQuery將自動根據http包mime信息返回responseXML或responseText,並做爲回調函數參數傳遞。緩存

可用的類型以下:
xml:返回XML文檔,可用JQuery處理。
html:返回純文本HTML信息;包含的script標籤會在插入DOM時執行。
script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),全部post請求都將轉爲get請求。
json:返回JSON數據。
jsonp:JSONP格式。使用SONP形式調用函數時,例如myurl?callback=?,JQuery將自動替換後一個「?」爲正確的函數名,以執行回調函數。
text:返回純文本字符串。服務器

8.beforeSend:
要求爲Function類型的參數,發送請求前能夠修改XMLHttpRequest對象的函數,例如添加自定義HTTP頭。在beforeSend中若是返回false能夠取消本次ajax請求。XMLHttpRequest對象是唯一的參數。

function(XMLHttpRequest){
    this;   //調用本次ajax請求時傳遞的options參數
}

9.complete:
要求爲Function類型的參數,請求完成後調用的回調函數(請求成功或失敗時均調用)。參數:XMLHttpRequest對象和一個描述成功請求類型的字符串。

function(XMLHttpRequest, textStatus){
    this;    //調用本次ajax請求時傳遞的options參數
}

10.success:
要求爲Function類型的參數,請求成功後調用的回調函數,有兩個參數:

  • 由服務器返回,並根據dataType參數進行處理後的數據。
  • 描述狀態的字符串。

    function(data, textStatus){
        //data多是xmlDoc、jsonObj、html、text等等
        this;  //調用本次ajax請求時傳遞的options參數
    }
  • 觸發條件:
    XMLHttpRequest對象的屬性readyState和status
    success:readyState==4 && (status>=200 && status < 300 || status === 304)

    readyState==4 請求已完成,且響應已就緒
    status==200 服務器響應正常。
    本質上是一個if else判斷,若

    if(readyState==4 && (status>=200 && status < 300 || status === 304)){
        success
    } else {
        error
    }

clipboard.png

11.error:
要求爲Function類型的參數,請求失敗時被調用的函數。該函數有3個參數,即XMLHttpRequest對象、錯誤信息、捕獲的錯誤對象(可選)。ajax事件函數以下:

function(XMLHttpRequest, textStatus, errorThrown){
    //一般狀況下textStatus和errorThrown只有其中一個包含信息
    this;   //調用本次ajax請求時傳遞的options參數
    // 打印 errorThrown 能夠看出錯誤信息
}

12.contentType:
要求爲String類型的參數,當發送信息至服務器時,內容編碼類型默認爲"application/x-www-form-urlencoded"。該默認值適合大多數應用場合。

13.dataFilter:
要求爲Function類型的參數,給Ajax返回的原始數據進行預處理的函數。提供data和type兩個參數。data是Ajax返回的原始數據,type是調用jQuery.ajax時提供的dataType參數。函數返回的值將由jQuery進一步處理。

function(data, type){
     //返回處理後的數據
     return data;
}

14.global:
要求爲Boolean類型的參數,默認爲true。表示是否觸發全局ajax事件。設置爲false將不會觸發全局ajax事件,ajaxStart或ajaxStop可用於控制各類ajax事件。

15.ifModified:
要求爲Boolean類型的參數,默認爲false。僅在服務器數據改變時獲取新數據。服務器數據改變判斷的依據是Last-Modified頭信息。默認值是false,即忽略頭信息。

16.jsonp:
要求爲String類型的參數,在一個jsonp請求中重寫回調函數的名字。該值用來替代在"callback=?"這種GET或POST請求中URL參數裏的"callback"部分,例如{jsonp:'onJsonPLoad'}會致使將"onJsonPLoad=?"傳給服務器。
jsonp本質上是get,即使指定type爲post,也會按照get來發起請求。

17.username:
要求爲String類型的參數,用於響應HTTP訪問認證請求的用戶名。

18.password:
要求爲String類型的參數,用於響應HTTP訪問認證請求的密碼。

19.processData:
要求爲Boolean類型的參數,默認爲true。默認狀況下,經過data選項傳遞進來的數據,若是是一個對象(技術上講只要不是字符串),都會處理轉化成一個查詢字符串,以配合默認內容類型 "application/x-www-form-urlencoded"。若是要發送 DOM 樹信息或其它不但願轉換的信息,請設置爲 false。

20.scriptCharset:
要求爲String類型的參數,只有當請求時dataType爲"jsonp"或者"script",而且type是GET時纔會用於強制修改字符集(charset)。一般在本地和遠程的內容編碼不一樣時使用。

其餘補充:

$.ajax() 函數依賴服務器提供的信息來處理返回的數據。若是服務器報告說返回的數據是 XML,那麼返回的結果就能夠用普通的 XML 方法或者 jQuery 的選擇器來遍歷。若是見獲得其餘類型,好比 HTML,則數據就以文本形式來對待。

經過 dataType 選項還能夠指定其餘不一樣數據處理方式。除了單純的 XML,還能夠指定 html、json、jsonp、script 或者 text。

其中,text 和 xml 類型返回的數據不會通過處理。數據僅僅簡單的將 XMLHttpRequest 的 responseText 或 responseHTML 屬性傳遞給 success 回調函數。

注意咱們必須確保網頁服務器報告的 MIME 類型與咱們選擇的 dataType 所匹配。好比說,XML的話,服務器端就必須聲明 text/xml 或者 application/xml 來得到一致的結果。

若是指定爲 html 類型,任何內嵌的 JavaScript 都會在 HTML 做爲一個字符串返回以前執行。相似地,指定 script 類型的話,也會先執行服務器端生成 JavaScript,而後再把腳本做爲一個文本數據返回。

若是指定爲 json 類型,則會把獲取到的數據做爲一個 JavaScript 對象來解析,而且把構建好的對象做爲結果返回。爲了實現這個目的,它首先嚐試使用 JSON.parse( )。若是瀏覽器不支持,則使用一個函數來構建。

JSON 數據是一種能很方便經過 JavaScript 解析的結構化數據。若是獲取的數據文件存放在遠程服務器上(域名不一樣,也就是跨域獲取數據),則須要使用 jsonp 類型。使用這種類型的話,會建立一個查詢字符串參數 callback=? ,這個參數會加在請求的 URL 後面。服務器端應當在 JSON 數據前加上回調函數名,以便完成一個有效的 JSONP 請求。若是要指定回調函數的參數名來取代默認的 callback,能夠經過設置 $.ajax() 的 jsonp 參數。

注意:JSONP 是 JSON 格式的擴展。它要求一些服務器端的代碼來檢測並處理查詢字符串參數。

若是指定了 script 或者 jsonp 類型,那麼當從服務器接收到數據時,其實是用了 <script> 標籤而不是 XMLHttpRequest 對象。這種狀況下,$.ajax() 再也不返回一個 XMLHttpRequest 對象,而且也不會傳遞事件處理函數,好比 beforeSend。

參考:http://www.w3school.com.cn/jq...

相關文章
相關標籤/搜索