jQuery ajax的accepts属性有什么作用?它真的有用吗?

30

花了一个小时努力解决这个(coffeescript)问题,不知道到底为什么。

$.ajax
  accepts: "application/json; charset=utf-8"

完全没有改变接受标头,而这个

$.ajax
  dataType: "json"

正确地设置了接受头部为application/json; charset=utf-8

完全困惑了,是我漏了什么还是接受属性是一年四季的愚人节玩笑?

1个回答

30

像往常一样,文档是你的好朋友:

accepts

默认值:取决于DataType

请求头中发送的内容类型告诉服务器它将接受什么类型的响应。如果需要修改 accepts 设置,建议在 $.ajaxSetup() 方法中进行一次性设置。

dataType

默认值:Intelligent Guess(xml、json、script 或 html)

从服务器返回的数据类型。如果没有指定,则 jQuery 会根据响应的 MIME 类型尝试推断出来(XML MIME 类型将产生 XML,在 1.4 版本中,JSON 将产生 JavaScript 对象,在 1.4 版本中,脚本将执行该脚本,而其他任何内容都将作为字符串返回)。可用的类型(以及作为成功回调的第一个参数传递的结果)为:

"xml": 返回可以通过 jQuery 处理的 XML 文档。

"html": 作为纯文本返回 HTML;当插入到 DOM 中时,包括的脚本标签会被评估。

"script": 将响应作为 JavaScript 进行评估,并将其作为纯文本返回。通过在 URL 后面添加查询字符串参数 _=[TIMESTAMP] 来禁用缓存,除非将 cache 选项设置为 true。注意:这会将 POST 请求转换为远程域请求的 GET 请求。

"json": 将响应解析为 JSON 并返回 JavaScript 对象。在 jQuery 1.4 中以严格的方式解析 JSON;任何格式不正确的 JSON 都将被拒绝并抛出一个解析错误。(有关正确的 JSON 格式的更多信息,请参见 json.org)

"jsonp": 使用 JSONP 加载 JSON 块。在 URL 的末尾添加额外的 ?callback=? 来指定回调函数。通过在 URL 后面添加查询字符串参数 _=[TIMESTAMP] 来禁用缓存。

"text": 纯文本字符串。多个以空格分隔的值:从 jQuery 1.5 开始,jQuery 可以将 dataType 从 Content-Type 标头接收到的类型转换为你需要的类型。例如,如果你想将文本响应视为 XML 来处理,则使用 "text xml" 作为 dataType。你还可以进行 JSONP 请求,将其接收为文本,并由 jQuery 解释为 XML:"jsonp text xml." 类似地,类似 "jsonp xml" 的缩写字符串将首先尝试从 jsonp 转换为 xml,如果失败,则从 jsonp 转换为 text,然后从 text 转换为 xml。

现在回到你的问题。我不熟悉 Coffeescript,但与 dataType 不同,accepts 参数是一个映射,应该像这样使用:

$.ajax({
    url: ...
    dataType: 'json',
    accepts: {
        xml: 'text/xml',
        text: 'text/plain'
    }
});

13
+1,同意关于文档的问题。然而,提供一个以你试图更改的标题命名的属性,而该属性实际上是相对于真正驱动总线的dataType来说是次要的,这完全不直观。同时设置dataType和accepts显得令人困惑,似乎会导致默认响应头。无论如何,很高兴发现只需要使用dataType就可以完成任务... - virtualeyes
18
我必须同意virtualeyes的看法,这个名字相当不直观。而且这份文档就像一个很难快速理解的朋友 :)... 另外,类型声明链接“Map”指向http://api.jquery.com/Types/#Map,似乎描述了一个数据参数,但没有示例代码。并且“默认值:取决于数据类型”是一种轻描淡写,不是吗:它总是取决于“dataType”,这给出了类型的顺序,对吧? ...文档最好像一个陌生人,让人能够立即理解。当然,我知道这很难实现。 - Jonas N
如果既没有指定dataType也没有指定accepts,那么会发送什么HTTP Accepts头呢?是空的吗? - Ciro Santilli OurBigBook.com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接