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

vir*_*yes 28 jquery types header response set

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

$.ajax
  accepts: "application/json; charset=utf-8"
Run Code Online (Sandbox Code Playgroud)

没有绝对没有改变接受头,而这

$.ajax
  dataType: "json"
Run Code Online (Sandbox Code Playgroud)

正确设置接受标头 application/json; charset=utf-8

我完全糊涂了,我错过了什么,或者是全年愚人节开玩笑的接受因素?

Dar*_*rov 28

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

接受

默认值:取决于DataType

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

数据类型

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

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

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

" html ":以纯文本形式返回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]到URL来禁用缓存,除非缓存选项设置为true.

" 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字符串相反,accepts参数是一个地图,应该像这样使用:

$.ajax({
    url: ...
    dataType: 'json',
    accepts: {
        xml: 'text/xml',
        text: 'text/plain'
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我必须赞同virtualeyes,而不是非直观的名字.这个文档就像一个很难快速理解的朋友:)...另外,类型声明链接'Map'指向http://api.jquery.com/Types/#Map,它似乎描述了一个数据参数.没有示例代码.并且"默认:依赖于DataType"是轻描淡写,不是吗:它_always_依赖于'dataType',它给出了类型的顺序,对吧?...理想情况下,文档应该更像是一个人们立即理解的陌生人.我知道,这当然很难实现. (18认同)
  • +1,同意re:文件; 但是,提供一个以您尝试更改的标头命名的属性是完全不直观的,实际上,该属性是相对于总线的真实驱动程序dataType的第二类公民.只是混淆因为设置dataType和accept似乎实际上导致默认响应头.无论如何,我很高兴发现只有数据类型可以完成这项工作...... (12认同)