當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


JQuery jQuery.ajaxTransport()用法及代碼示例


用法
jQuery.ajaxTransport( dataType, handler ) => undefined

說明:創建一個處理 Ajax 數據實際傳輸的對象。

  • 添加的版本:1.5jQuery.ajaxTransport( dataType, handler )

    • dataType
      類型:String
      標識要使用的數據類型的字符串
    • handler
      類型:Function(PlainObject選項,PlainObject originalOptions,jqXHRjqXHR)
      一個處理程序,用於返回新的傳輸對象以與第一個參數中提供的數據類型一起使用。

傳輸是提供兩種方法的對象,sendabort$.ajax() 在內部用於發出請求。傳輸是增強$.ajax() 的最高級方法,僅當預過濾器和轉換器不足時才應作為最後的手段使用。

由於每個請求都需要自己的傳輸對象實例,因此無法直接注冊傳輸。因此,您應該提供一個返回傳輸的函數。

運輸工廠使用 $.ajaxTransport() 注冊。典型的注冊如下所示:

$.ajaxTransport( dataType, function( options, originalOptions, jqXHR ) {
  if( /* transportCanHandleRequest */ ) {
    return {
      send: function( headers, completeCallback ) {
        // Send code
      },
      abort: function() {
        // Abort code
      }
    };
  }
});

其中:

  • options 是請求選項
  • originalOptions 是提供給 $.ajax() 方法的選項,未經修改,因此沒有來自 ajaxSettings 的默認值
  • jqXHR是請求的jqXHR對象
  • headers 是(鍵值)請求標頭的對象,如果支持,傳輸可以傳輸它
  • completeCallback 是用於通知 Ajax 請求完成的回調

completeCallback 具有以下簽名:

function( status, statusText, responses, headers ) {}

其中:

  • status 是響應的 HTTP 狀態代碼,例如 200 表示典型成功,或 404 表示未找到資源。
  • statusText 是響應的狀態文本。
  • responses(可選)是一個包含數據類型/值的對象,其中包含傳輸可以提供的所有格式的響應(例如,本機 XMLHttpRequest 對象會將響應設置為 { xml: XMLData, text: textData } 以獲取 XML 文檔的響應)
  • headers(可選)是一個包含所有響應標頭的字符串,如果傳輸可以訪問它們(類似於XMLHttpRequest.getAllResponseHeaders() 將提供的)。

就像預過濾器一樣,傳輸的工廠函數可以附加到特定的數據類型:

$.ajaxTransport( "script", function( options, originalOptions, jqXHR ) {
  // Will only be called for script requests
});

以下示例顯示了如何實現最小圖像傳輸:

$.ajaxTransport( "image", function( s ) {
  if ( s.type === "GET" && s.async ) {
    var image;
    return {
      send: function( _ , callback ) {
        image = new Image();
        function done( status ) {
          if ( image ) {
            var statusText = ( status === 200 ) ? "success" : "error",
              tmp = image;
            image = image.onreadystatechange = image.onerror = image.onload = null;
            callback( status, statusText, { image: tmp } );
          }
        }
        image.onreadystatechange = image.onload = function() {
          done( 200 );
        };
        image.onerror = function() {
          done( 404 );
        };
        image.src = s.url;
      },
      abort: function() {
        if ( image ) {
          image = image.onreadystatechange = image.onerror = image.onload = null;
        }
      }
    };
  }
});

處理自定義數據類型

jQuery Ajax 實現帶有一組標準數據類型,例如 text、json、xml 和 html。

使用 $.ajaxSetup() 中的 converters 選項來擴充或修改 $.ajax() 使用的數據類型轉換策略。

未縮小的 jQuery 源代碼本身包含一個默認轉換器列表,它有效地說明了如何使用它們:

// List of data converters
// 1) Key format is "source_type destination_type"
//    (a single space in-between)
// 2) The catchall symbol "*" can be used for source_type
converters: {
  // Convert anything to text
  "* text": window.String,
  // Text to html (true = no transformation)
  "text html": true,
  // Evaluate text as a json expression
  "text json": jQuery.parseJSON,
  // Parse text as xml
  "text xml": jQuery.parseXML
}

當您在 $.ajaxSetup() 中全局指定 converters 選項或在 $.ajax() 中每次調用時,該對象將映射到默認轉換器,覆蓋您指定的轉換器並保持其他轉換器不變。

例如,jQuery 源代碼使用$.ajaxSetup() 為"text script" 添加轉換器:

jQuery.ajaxSetup({
  accepts: {
    script: "text/javascript, application/javascript"
  },
  contents: {
    script: /javascript/
  },
  converters: {
    "text script": jQuery.globalEval
  }
});

相關用法


注:本文由純淨天空篩選整理自jquery.com大神的英文原創作品 jQuery.ajaxTransport()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。