jQuery ajax接受attrib的重点是什么? 它真的做了什么吗?

花了一个小时的时间试图解决地球上的原因(coffeescript)

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

什么都没有改变接受头,而这

 $.ajax dataType: "json" 

正确地将accept标头设置为application/json; charset=utf-8 application/json; charset=utf-8

完全混淆,我是否遗漏了一些东西,或者是全年愚人节开玩笑的接受因素?

一如既往, 文档是你的朋友:

接受

默认值:取决于DataType

在请求标头中发送的内容类型,告诉服务器它将接受哪种响应。 如果接受设置需要修改,建议在$ .ajaxSetup()方法中执行此操作。

数据类型

默认值:智能猜测(xml,json,脚本或html)

您期望从服务器返回的数据类型。 如果没有指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,其他任何东西将是以字符串forms返回)。 可用的类型(以及作为成功回调的第一个参数传递的结果)是:

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

html ”:以纯文本forms返回HTML; 包含的脚本标记在插入DOM时进行评估。

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

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

jsonp ”:使用JSONP加载JSON块。 添加一个额外的?callback=? 到URL的末尾以指定回调。 通过附加查询字符串参数禁用缓存,
_=[TIMESTAMP] ,除非cache选项设置为true,否则返回URL。

text ”:纯文本字符串。 多个空格分隔值:从jQuery 1.5开始,jQuery可以将dataType从Content-Type标头中收到的数据转换为您需要的数据类型。 例如,如果要将文本响应视为XML,请对dataType使用“ text xml ”。 您还可以发出JSONP请求,将其作为文本接收,并由jQuery解释为XML:“jsonp text xml”。 类似地,诸如“jsonp xml”之类的速记字符串将首先尝试从jsonp转换为xml,如果失败,则从jsonp转换为text,然后从text转换为xml。

现在回到你的问题。 我不熟悉cofeescript但与dataType是一个字符串相反,accept参数是一个map,应该像这样使用:

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