jQuery.ajax如何使用contents属性

时间:2013-04-02 09:20:26

标签: jquery ajax

有人能举例说明如何使用contents属性吗?

$.ajax(
{
   contents : {...}
}

jQuery自己的文档仅说明以下内容:

内容

An object of string/regular-expression pairs that determine how jQuery will parse the response, given its content type

2 个答案:

答案 0 :(得分:6)

来自http://api.jquery.com/jQuery.ajax/

  

$ .ajax()转换器支持将数据类型映射到其他数据类型。但是,如果要将自定义数据类型映射到已知类型(例如json),则必须使用contents选项在响应Content-Type和实际数据类型之间添加对应关系:

$.ajaxSetup({
  contents: {
    mycustomtype: /mycustomtype/
  },
  converters: {
    "mycustomtype json": function ( result ) {
      // do stuff
      return newresult;
    }
  }
});

那么,这意味着您的服务器响应的数据类型可能是mycustomtype。当AJAX调用收到数据时,它会看到它的数据类型是mycustomtype并且匹配我们设置的正则表达式(在内容中):/mycustomtype/并抛出将数据导入我们指定的转换器,例如。 mycustomtype json()将尝试将数据转换为json。

详细说明转换器

converters["mycustomtype json"]表示当您要将mycustomtype转换为json格式时,将执行此处指定的函数,因此该函数的内容将执行将返回的解析{ {1}}。 您可以指定其他转换类型,例如

JSON

你会编写自己的转换器函数:

converters: {
    "mycustomtype json": converterFromCustomTypeToJson,      // mycustomtype -> json
    "mycustomtype jsonp": converterFromCustomTypeToJsonP,    // mycustomtype -> jsonp
    "mycustomtype text": converterFromCustomTypeToText,      // mycustomtype -> text 
    "text mycustomtype": converterFromTextToCustomType       // text -> mycustomtype 
}

您还希望避免弄乱默认转换器,它们是:

var converterFromCustomTypeToJson = function(result) {
        var jsonResult = ...
        /* do conversion to JSON */
        return jsonResult;
    },
    converterFromCustomTypeToJsonP = function(result) {
        var jsonPResult = ...
        /* do conversion to JSONP */
        return jsonPResult;
    },
    converterFromCustomTypeToText = function(result) {
        var textResult = ...
        /* do conversion to text */
        return textResult;
    },
    converterFromTextToCustomType = function(result) {
        var customResult = ...
        /* do conversion to mycustomtype */
        return customResult;
    };

答案 1 :(得分:3)

contents用于定义新的dataTypes。 jQuery中定义了4种默认数据类型:xml,json,script和html。如果没有为ajax调用指定dqataType,jQuery将尝试根据响应的MIME类型推断它。使用contents定义新数据类型时,需要指定正则表达式,该表达式将用于从响应的MIME类型推断自定义dataType。

对于ex来定义CSV dataType,否则将其解析为text:

$.ajaxSetup({
  // for: text/csv or application/csv
  contents: {
    csv: /csv/
  }
});

contents与转换器一起使用:

将csv转换为json定义自定义转换器:

$.ajaxSetup({
  contents: {
    csv: /csv/
  },
  converters: {
    "csv json": function (result) {
      // parse csv here
      return jsonresult;
    }
  }
});