加载中...

jQuery.ajaxTransport()


概述    jQuery.ajaxTransport( dataType, handler(options, originalOptions, jqXHR) )

描述:创建一个对象,用于处理Ajax数据的实际传输。

  • V : 1.5jQuery.ajaxTransport( dataType, handler(options, originalOptions, jqXHR) )

    • dataType
      类型: String
      一个字符串,标识使用的数据类型
    • handler(options, originalOptions, jqXHR)
      类型: Function()
      一个处理程序,使用第一个参数中提供的数据类型返回新的传输(transport)对象。

传输(transport)是一个对象,它提供了两种方法,sendabort,内部使用由$.ajax()发出请求。传输(transport)是最高级的方法用来增强$.ajax()并且应仅作为当预过滤器(prefilters)和转换器(converters)无法满足你的需求的时候的最后的手段。

由于每个请求需要有自己的传输(transport)对象实例,传输不能直接注册。因此,你应该提供一个函数代替返回传输(transport)。

传输(transports)工厂注册使用$.ajaxTransport()。一个典型的注册看起来像这样:

  1. $.ajaxTransport( dataType, function( options, originalOptions, jqXHR ) {
  2. if( /* transportCanHandleRequest */ ) {
  3. return {
  4. send: function( headers, completeCallback ) {
  5. // Send code
  6. },
  7. abort: function() {
  8. // Abort code
  9. }
  10. };
  11. }
  12. });

以下的情况下:

  • options 是请求的选项
  • originalOptions 值作为提供给Ajax方法未经修改的选项,因此,没有ajaxSettings设置中的默认值
  • jqXHR 是请求的jqXHR对象
  • headers 是一个请求头信息(键 - 值)对象,该传输(transport)都可以发送,如果它支持
  • completeCallback 是回调用于该请求Ajax的完成通知

completeCallback 具有以下签名:

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

以下的情况下:

  • status 是响应的HTTP状态代码,像200是一个典型的成功,或404是没有找到资源。
  • statusText 是响应状态文本。
  • responses (可选)是一个对象,它包含数据类型/值(dataType/value)包含响应运输提供的所有格式。(例如,一个原生的XMLHttpRequest对象设置reponses为{ xml: XMLData, text: textData } ,这样响应是一个XML文档)
  • headers (可选)是一个字符串,其中包含所有的响应信息头,如果运输对它们的访问(类似于XMLHttpRequest.getAllResponseHeaders()提供的方法)。

就像预过滤器(prefilters),一个传输(transport)的工厂函数可以被连接到一个特定的 dataType(数据类型):

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

面的示例演示小的图像怎样传输实现:

  1. $.ajaxTransport( "image", function( s ) {
  2. if ( s.type === "GET" && s.async ) {
  3. var image;
  4. return {
  5. send: function( _ , callback ) {
  6. image = new Image();
  7. function done( status ) {
  8. if ( image ) {
  9. var statusText = ( status == 200 ) ? "success" : "error",
  10. tmp = image;
  11. image = image.onreadystatechange = image.onerror = image.onload = null;
  12. callback( status, statusText, { image: tmp } );
  13. }
  14. }
  15. image.onreadystatechange = image.onload = function() {
  16. done( 200 );
  17. };
  18. image.onerror = function() {
  19. done( 404 );
  20. };
  21. image.src = s.url;
  22. },
  23. abort: function() {
  24. if ( image ) {
  25. image = image.onreadystatechange = image.onerror = image.onload = null;
  26. }
  27. }
  28. };
  29. }
  30. });

Handling Custom Data Types(处理自定义数据类型)

jQuery的Ajax实现了一套标准的数据类型,比如text, json, xml, 和 html。

$.ajaxSetup() 中使用converters选项 来增加或修改数据类型使用$.ajax()转换策略。

未更改的 jQuery 代码 本身包含一个列表的默认转换器,这有力地说明了可以如何使用它们:

  1. // List of data converters
  2. // 1) key format is "source_type destination_type"
  3. // (a single space in-between)
  4. // 2) the catchall symbol "*" can be used for source_type
  5. converters: {
  6. // Convert anything to text
  7. "* text": window.String,
  8. // Text to html (true = no transformation)
  9. "text html": true,
  10. // Evaluate text as a json expression
  11. "text json": jQuery.parseJSON,
  12. // Parse text as xml
  13. "text xml": jQuery.parseXML
  14. }

当你在$.ajaxSetup()全局的指定一个converters 选项,或者每次调用$.ajax(),这个对象将映射到默认的转换器,覆盖您所指定的那些,让其他不变。

例如,jQuery代码使用$.ajaxSetup()添加一个“text script”转换器:

  1. jQuery.ajaxSetup({
  2. accepts: {
  3. script: "text/javascript, application/javascript"
  4. },
  5. contents: {
  6. script: /javascript/
  7. },
  8. converters: {
  9. "text script": jQuery.globalEval
  10. }
  11. });


还没有评论.