【发布时间】:2011-02-12 22:40:33
【问题描述】:
有什么区别
contentType: "application/json; charset=utf-8",
dataType: "json",
对比
contentType: "application/json",
dataType: "text",
【问题讨论】:
标签: jquery
有什么区别
contentType: "application/json; charset=utf-8",
dataType: "json",
对比
contentType: "application/json",
dataType: "text",
【问题讨论】:
标签: jquery
contentType 是发送到服务器的 HTTP 标头,指定特定格式。dataType 你是在告诉 jQuery 期望什么样的响应。$.ajax() 文档也有这些的完整描述。
在您的特定情况下,第一个是要求 响应 在 UTF-8 中,第二个不在乎。第一个是将 response 视为 JavaScript 对象,第二个是将其视为字符串。
所以第一个是:
success: function(data) {
// get data, e.g. data.title;
}
第二个:
success: function(data) {
alert("Here's lots of data, just a string: " + data);
}
【讨论】:
Content-type 选项表示随请求发送的数据将采用 utf-8 格式,与响应无关(正如答案的第一部分正确反映的那样)。
根据docs:
"json":将响应评估为 JSON 并返回一个 JavaScript 对象。在 jQuery 1.4 中,JSON 数据以严格的方式解析;任何格式错误的 JSON 都会被拒绝并引发解析错误。 (有关正确的 JSON 格式的更多信息,请参阅 json.org。)"text":纯文本字符串。【讨论】:
contentType 指定作为请求的一部分发送到服务器的数据格式(它也可以作为响应的一部分发送,稍后会详细介绍)。
dataType 指定客户端(浏览器)要接收的数据的预期格式。
两者不可互换。
contentType 是发送到服务器的标头,指定发送到服务器的数据格式(即消息正文的内容)。这用于 POST 和 PUT 请求。通常当您发送 POST 请求时,消息正文包括传入的参数,例如:================================
示例请求:
POST /search HTTP/1.1
Content-Type: application/x-www-form-urlencoded
<<other header>>
name=sam&age=35
================================
“name=sam&age=35”上方的最后一行是消息正文,contentType 将其指定为 application/x-www-form-urlencoded,因为我们在消息正文中传递表单参数。 但是我们不仅限于发送参数,我们可以发送 json, xml,... 像这样(发送不同类型的数据对于 RESTful Web 服务特别有用):
================================
示例请求:
POST /orders HTTP/1.1
Content-Type: application/xml
<<other header>>
<order>
<total>$199.02</total>
<date>December 22, 2008 06:56</date>
...
</order>
================================
所以这次的 ContentType 是:application/xml,因为这就是我们要发送的内容。 上面的示例显示了示例请求,同样,从服务器发送的响应也可以具有 Content-Type 标头,指定服务器发送的内容,如下所示:
================================
示例响应:
HTTP/1.1 201 Created
Content-Type: application/xml
<<other headers>>
<order id="233">
<link rel="self" href="http://example.com/orders/133"/>
<total>$199.02</total>
<date>December 22, 2008 06:56</date>
...
</order>
================================
dataType 指定期望的响应格式。它与 Accept 标头有关。 JQuery 将尝试根据响应的 Content-Type 推断它。================================
示例请求:
GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>
================================
以上请求需要来自服务器的 XML。
关于你的问题,
contentType: "application/json; charset=utf-8",
dataType: "json",
在这里,您使用 UTF8 字符集发送 json 数据,并且您希望从服务器返回 json 数据。根据数据类型的 JQuery 文档,
json 类型将获取的数据文件解析为 JavaScript 对象,并 将构造的对象作为结果数据返回。
所以你在成功处理程序中得到的是正确的 javascript 对象(JQuery 为你转换 json 对象)
而
contentType: "application/json",
dataType: "text",
这里您发送的是 json 数据,因为您没有根据 JQuery 文档提及编码,
如果没有指定字符集,数据将被传输到服务器 使用服务器的默认字符集;你必须适当地解码 在服务器端。
并且由于 dataType 被指定为文本,因此您在成功处理程序中得到的是纯文本,根据 dataType 的文档,
text 和 xml 类型返回数据而不进行处理。数据是 简单地传递给成功处理程序
【讨论】:
同时调用两个 API 时,jQuery Ajax 加载器无法正常工作。要解决此问题,您必须使用 Ajax 设置中的 isAsync 属性一一调用 API。您还需要确保设置中没有任何错误。否则,加载程序将无法工作。例如,未定义的内容类型、POST/PUT/DELETE/GET 调用的数据类型。
【讨论】: