dataType vs accepted – Ajax请求
我试图理解Ajax请求中的accept和dataType之间的区别。 文件说明:
文档
接受(默认值:取决于DataType)类型:PlainObject在请求标头中发送的内容类型,它告诉服务器它将接受哪种响应。
dataType(默认值:Intelligent Guess(xml,json,script或html))类型:String您希望从服务器返回的数据类型。
基本上,它是一样的吗?它有相同的目的。
这是一个有希望的准确答案:
accepts
选项允许您更改请求中的Accept
标头
更改此选项时,请求中的Accept
标头将设置为指定的标头。 请注意,它不是字符串,而是映射已接受响应的MIME类型的对象。 像{ text: "text/plain", html: "text/html" }
。 服务器可以使用Accept
标头以请求所期望的格式提供响应,或者如果它无法以请求所期望的格式之一提供响应,则会失败。
一个非常重要的事情是,至少在jQuery 1.11.3(我测试过)中,这个选项似乎不起作用,而是我设法使用headers
选项更改headers
: headers: {Accept : "text/json"}
。
dataType
选项允许您预处理响应
如果您定义了一个dataType
,那么请求的响应将由jQuery预处理,然后才可用于succes处理程序。 例如:
如果指定了
json
,则在作为对象传递给成功处理程序之前,使用jQuery.parseJSON
解析响应。如果指定了
script
,$.ajax()
将执行从服务器接收的JavaScript,然后将其作为字符串传递给成功处理程序。
更多示例,请参见“数据类型”部分。
如果未设置dataType
,则响应的Content-Type
将确定应对响应执行哪些预处理。 请注意,更改dataType
也会更改Accept
标头。 通常不需要自己更改Accept
标头。
例
request.php
的index.html
当dataType
设置为"script"
, Accept
标头将包含"text/javascript"
因此request.php
上的测试将通过。 它将返回"alert('This is my response!')"
并且因为dataType
设置为"script"
jQuery将尝试将其作为javascript执行,然后将其作为纯文本传递给成功处理程序。
如果您将dataType
更改为"text"
则Accept
标头将不包含"text/javascript"
因此request.php
上的测试将失败。 它将返回"I only provide text/javascript responses"
,因为dataType
设置为"text"
jQuery会将其作为纯文本传递给成功处理程序。