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选项更改headersheaders: {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会将其作为纯文本传递给成功处理程序。