jQuery.ajax() 函數詳解

來源:互聯網
上載者:User

標籤:back   oca   tle   w3c   power   理解   parser   top   ade   

jQuery.ajax()函數用於通過後台HTTP請求載入遠端資料

jQuery.ajax()函數是jQuery封裝的AJAX技術實現,通過該函數,我們無需重新整理當前頁面即可擷取遠程伺服器上的資料。

jQuery.ajax()函數是jQuery的底層AJAX實現。jQuery.get()、 jQuery.post()、load()、 jQuery.getJSON()、 jQuery.getScript()等函數都是該函數的簡化形式(都調用該函數,只是參數設定有所不同或有所省略)。

該函數屬於全域jQuery對象(也可理解為靜態函數)。

文法

jQuery 1.0 新增該靜態函數。jQuery.ajax()函數有以下兩種用法:

jQuery.ajax( [ settings ] ] )
jQuery.ajax( url [, settings ] ] )//用法二:jQuery 1.5 新增支援該用法。
參數

請根據前面文法部分所定義的參數名稱尋找對應的參數。

參數settings是一個對象,jQuery.ajax()可以識別該對象的以下屬性(它們都是可選的):

參數 描述
url String類型URL請求字串。
settings 可選/Object類型一個Object對象,其中的每個屬性用來指定發送請求所需的額外參數設定。

 

 

 

accepts      Object類型

預設值:取決於dataType屬性。

發送的內容類型要求標頭,用於告訴伺服器——瀏覽器可以接收伺服器返回何種類型的響應。

async    Boolean類型

預設值:true

指示是否是非同步請求。同步請求將鎖定瀏覽器,直到擷取到遠端資料後才能執行其他動作。

beforeSend    Function類型

指定在請求發送前需要執行的回呼函數。該函數還有兩個參數:其一是jqXHR對象,其二是當前settings對象。這是一個Ajax事件,如果該函數返回false,將取消本次ajax請求。

cache    Boolean類型

預設值:true(dataType為‘script‘或‘jsonp‘時,則預設為false)。

指示是否緩衝URL請求。如果設為false將強制瀏覽器不緩衝當前URL請求。該參數只對HEAD、GET請求有效(POST請求本身就不會緩衝)。

complete    Function/Array類型

指定請求完成(無論成功或失敗)後需要執行的回呼函數。該函數還有兩個參數:一個是jqXHR對象,一個是表示請求狀態的字串(‘success‘、 ‘notmodified‘、 ‘error‘、 ‘timeout‘、 ‘abort‘或‘parsererror‘)。這是一個Ajax事件。

從jQuery 1.5開始,該屬性值可以是數組形式的多個函數,每個函數都將被回調執行。

contents    Object類型1.5 新增

一個以"{字串:Regex}"配對的對象,用來確定jQuery將如何解析響應,給定其內容類型。

contentType    String類型

預設值:‘application/x-www-form-urlencoded; charset=UTF-8‘。

使用指定的內容編碼類別型將資料發送給伺服器。W3C的XMLHttpRequest規範規定charset始終是UTF-8,你如果將其改為其他字元集,也無法強制瀏覽器更改字元編碼。

context    Object類型

用於設定Ajax相關回呼函數的內容物件(也就是函數內的this指標)。

converters    Object類型1.5 新增

預設值:{‘* text‘: window.String, ‘text html‘: true, ‘text json‘: jQuery.parseJSON, ‘text xml‘: jQuery.parseXML}

一個資料類型轉換器。每個轉換器的值都是一個函數,用於返迴響應轉化後的值。

crossDomain    Boolean類型1.5 新增

預設值:同域請求為false,跨域請求為true

指示是否是跨域請求。如果你想在同一域中強制跨域請求(如JSONP形式),請設定為true。例如,這允許伺服器端重新導向到另一個域。

data    任意類型

發送到伺服器的資料,它將被自動轉為字串類型。如果是GET請求,它將被附加到URL後面。

dataFilter      Function類型

指定處理響應的未經處理資料的回呼函數。該函數還有兩個參數:其一表示響應的未經處理資料的字串,其二是dataType屬性字串。

dataType    String類型

預設值:jQuery智能猜測,猜測範圍(xml、 json、 script或html)

指定返回的資料類型。該屬性值可以為:

  • ‘xml‘ :返回XML文檔,可使用jQuery進行處理。
  • ‘html‘: 返回HTML字串。
  • ‘script‘: 返回JavaScript代碼。不會自動緩衝結果。除非設定了cache參數。注意:在遠程請求時(不在同一個域下),所有POST請求都將轉為GET請求。(因為將使用DOM的script標籤來載入)
  • ‘json‘: 返回JSON資料。JSON資料將使用嚴格的文法進行解析(屬性名稱必須加雙引號,所有字串也必須用雙引號),如果解析失敗將拋出一個錯誤。從jQuery 1.9開始,空內容的響應將返回null{}
  • ‘jsonp‘: JSONP格式。使用JSONP形式調用函數時,如"url?callback=?",jQuery將自動替換第二個?為正確的函數名,以執行回呼函數。
  • ‘text‘: 返回純文字字串。
error    Function/Array類型

指定請求失敗時執行的回呼函數。該函數有3個參數:jqXHR對象、 請求狀態字串(null、 ‘timeout‘、 ‘error‘、 ‘abort‘和‘parsererror‘)、 錯誤資訊字串(響應狀態的文本描述部分,例如‘Not Found‘或‘Internal Server Error‘)。這是一個Ajax事件。跨域指令碼和跨域JSONP請求不會調用該函數。

從jQuery 1.5開始,該屬性值可以是數組形式的多個函數,每個函數都將被回調執行。

global    Boolean類型

預設值:true

指示是否觸發全域Ajax事件。將該值設為false將阻止全域事件處理函數被觸發,例如ajaxStart()和ajaxStop()。它可以用來控制各種Ajax事件。

headers    Object類型1.5 新增

預設值:{}

以對象形式指定附加的要求標頭資訊。要求標頭X-Requested-With: XMLHttpRequest將始終被添加,當然你也可以在此處修改預設的XMLHttpRequest值。headers中的值可以覆蓋beforeSend回呼函數中設定的要求標頭(意即beforeSend先被調用)。

$.ajax({
    url: "my.php" ,
    headers: {
        "Referer": "http://www.365mini.com" // 有些瀏覽器不允許修改該要求標頭
        ,"User-Agent": "newLine" // 有些瀏覽器不允許修改該要求標頭
        ,"X-Power": "newLine"
        ,"Accept-Language": "en-US"
    }
});
ifModified    Boolean類型

預設值:false

允許當前請求僅在伺服器資料改變時擷取新資料(如未更改,瀏覽器從緩衝中擷取資料)。它使用HTTP頭資訊Last-Modified來判斷。從jQuery 1.4開始,他也會檢查伺服器指定的‘etag‘來確定資料是否已被修改。

isLocal    Boolean類型1.5.1 新增

預設值:取決於當前的位置協議。

允許將當前環境視作"本地",(例如檔案系統),即使預設情況下jQuery不會如此識別它。目前,以下協議將被視作本地:file*-extensionwidget

jsonp    String類型

重寫JSONP請求的回呼函數名稱。該值用於替代"url?callback=?"中的"callback"部分。

jsonpCallback    String/Function類型

為JSONP請求指定一個回呼函數名。這個值將用來取代jQuery自動產生的隨機函數名。

從jQuery 1.5開始,你也可以指定一個函數來返回所需的函數名稱。

mimeType    String類型1.5.1 新增

一個mime類型用來覆蓋XHR的mime類型。

password    String類型

用於響應HTTP訪問認證請求的密碼。

processData    Boolean類型

預設值:true

預設情況下,通過data屬性傳遞進來的資料,如果是一個對象(技術上講,只要不是字串),都會處理轉化成一個查詢字串,以配合預設內容類型 "application/x-www-form-urlencoded"。如果要發送 DOM樹資訊或其它不希望轉換的資訊,請設定為false

scriptCharset    String類型

設定該請求載入的指令檔的字元集。只有當請求時dataType為"jsonp"或"script",並且type是"GET"才會用於強制修改charset。這相當於設定<script>標籤的charset屬性。通常只在當前頁面和遠端資料的內容編碼不同時使用。

statusCode      Object類型1.5 新增

預設值: {}

一組數值的HTTP代碼和函數構成的對象,當響應時調用了相應的代碼。例如:

$.ajax({
    url: a_not_found_url ,
    // 當響應對應的狀態代碼時,執行對應的回呼函數
    statusCode: {
        404: function() {
            alert( "找不到頁面" );
        },
        200: function(){
            alert("請求成功");
        }
    }
});
success      Function/Array類型

指定請求成功後執行的回呼函數。該函數有3個參數:請求返回的資料、響應狀態字串、jqXHR對象。

從jQuery 1.5開始,該屬性值可以是數組形式的多個函數,每個函數都將被回調執行。

timeout    Number類型

佈建要求逾時的毫秒值。

traditional    Boolean類型

如果你希望使用傳統方式來序列化參數,將該屬性設為true

type    String類型

預設值:"GET"。

請求類型,可以為‘POST‘或‘GET‘。注意:你也可以在此處使用諸如‘PUT‘、‘DELETE‘等其他請求類型,但它們不被所有瀏覽器支援。

url    String類型

預設值:當前頁面URL。

請求的目標URL。

username    String類型

用於響應HTTP訪問認證請求的使用者名稱。

xhr    Function類型

預設值:在IE下是ActiveXObject(如果可用),在其他瀏覽器中是XMLHttpRequest

一個用於建立並返回XMLHttpRequest對象的回呼函數。你可以重寫該屬性以提供自己的XHR實現,或增強其功能。

xhrFields    Object類型1.5.1 新增

一個具有多個"欄位名稱-欄位值"對的對象,用於對本地XHR對象進行設定。一對「檔案名稱-檔案值」在本機設定XHR對象。例如,如果需要,你可以用它來為跨域請求設定XHR對象的withCredentials屬性為true

$.ajax({
   url: a_cross_domain_url,
   // 將XHR對象的withCredentials設為true
   xhrFields: {
      withCredentials: true
   }
});

注意:
1、如果你的所有AJAX請求都需要設定settings中某些參數,你可以使用jQuery.ajaxSetup()函數進行全域設定,而無需在每次執行jQuery.ajax()時分別設定。
2、在jQuery 1.4(含)之前,選項參數completesucceserror等Ajax事件的回呼函數的第3個參數不是經過jQuery封裝的jqXHR對象,而是原生的XMLHttpRequest對象。

傳回值

jQuery.ajax()函數的傳回值為jqXHR類型,返回當前該請求的jqXHR對象(jQuery 1.4及以前版本返回的是原生的XMLHttpRequest對象)。

樣本&說明

如果沒有給jQuery.ajax()指定任何參數,則預設請求當前頁面,並且不對返回資料進行處理。

jQuery.ajax()函數的settings對象中,常用的屬性有:url、type、async、data、dataType、success、error、complete、beforeSend、timeout等。

請參考下面這段初始HTML代碼:

<div id="content"></div>

以下是與jQuery.ajax()函數相關的jQuery範例程式碼,以示範jQuery.ajax()函數的具體用法:

$.ajax({     url: "jquery_ajax.php"    , type: "POST"    , data: "name=codeplayer&age=18"    , success: function( data, textStatus, jqXHR ){        // data 是返回的資料        // textStatus 可能為"success"、"notmodified"等        // jqXHR 是經過jQuery封裝的XMLHttpRequest對象        alert("返回的資料" + data);    }});$.ajax({     url: "jquery_ajax.php?page=1&id=3"    , type: "POST"    // jQuery會自動將對象資料轉換為 "name=codeplayer&age=18&uid=1&uid=2&uid=3"    , data: { name:"codeplayer", age:18, uid: [1, 2, 3] }    // 請求成功時執行    , success: function( data, textStatus, jqXHR ){        alert("返回的資料" + data);    }    // 請求失敗時執行    , error: function(jqXHR, textStatus, errorMsg){        // jqXHR 是經過jQuery封裝的XMLHttpRequest對象        // textStatus 可能為: null、"timeout"、"error"、"abort"或"parsererror"        // errorMsg 可能為: "Not Found"、"Internal Server Error"等        alert("請求失敗:" + errorMsg);    }});// 將url單獨提取出來作為第一個參數(jQuery 1.5+才支援)$.ajax("jquery_ajax.php?action=type&id=3", {     dataType: "json" // 返回JSON格式的資料    , success: function( data, textStatus, jqXHR ){        // 假設返回的字串資料為{ "name": "CodePlayer", age: 20 }        // jQuery已幫我們將該JSON字串轉換為對應的JS對象,可以直接使用        alert( data.name ); // CodePlayer    }   });$.ajax( {    // 注意這裡有個參數callback=?     url: "http://cross-domain/jquery_ajax.php?name=Jim&callback=?&age=21"    , async: false // 同步請求,發送請求後瀏覽器將被鎖定,只有等到該請求完成(無論成功或失敗)後,使用者才能操作,js代碼才會繼續執行    , dataType: "jsonp" // 返回JSON格式的資料    , success: function( data, textStatus, jqXHR ){        // 假設返回的字串資料為{ "site_name": "CodePlayer", "site_desc": "專註於編程開發技術分享" }        // jQuery已幫我們將該JSON字串轉換為對應的JS對象,可以直接使用        alert( data.site_desc ); // 專註於編程開發技術分享    }   });$.ajax( {    // 載入指定的js檔案到當前文檔中     url: "http://code.jquery.com/jquery-1.8.3.min.js"    , dataType: "script"});

 

jQuery.ajax() 函數詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.