当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。