'标题之间有什么区别:{"内容类型":XXX}'和' contentType:XXX'?

时间:2016-12-08 09:32:10

标签: javascript jquery

JQuery.ajax提供contentType属性来定义请求数据类型。 此外,content-type可以由headers属性设置。

它们之间有什么区别吗?

$.ajax({
    dataType: "json",
    url: url,
    type: 'post',
    data: data,
    contentType: "application/json",
    ...
});

$.ajax({
    dataType: "json",
    url: url,
    type: 'post',
    data: data,
    headers: {"Content-Type": "application/json"},
    ...
});

2 个答案:

答案 0 :(得分:4)

来自jQuery源代码。 Example = ReplaceSafe(Example, new[] {new KeyValuePair<string, string>("OK", "true"), new KeyValuePair<string, string>("LOK", "false")}); 选项的唯一用法是:

contentType

if (s.data && s.hasContent && s.contentType !== false || options.contentType) { jqXHR.setRequestHeader("Content-Type", s.contentType); } 选项的唯一用途是:

headers

唯一的区别是,当使用for (i in s.headers) { jqXHR.setRequestHeader(i, s.headers[i]); } 时,jQuery会额外检查您的请求是否包含任何实际数据。如果不是,则contentType标头不会添加到标头中。

PS:我只检查了jQuery2.1.3的代码,但我怀疑它与其他任何版本的不同

答案 1 :(得分:0)

我知道这个问题已经过时了,但今天我们遇到了与此主题相关的问题。

如果您的数据包含连续的问号,则jQuery的行为在设置contentType属性或content-type标题之间会有所不同。

根据以下链接,contentType属性是最佳选择。否则,jQuery将假定您正在尝试使用jsonp

Uncomprehensible jQuery $.ajax() behavior when data contains consecutive question marks