$. ajax-dataType

有什么区别

contentType: "application/json; charset=utf-8",
dataType: "json",

对。

contentType: "application/json",
dataType: "text",
450256 次浏览
  • contentType是发送到服务器的 HTTP标题,指定特定的格式。
    例如: 我正在发送 JSON 或 XML
  • dataType就是告诉 jQuery 回应的类型。
    期待 JSON、 XML 或 HTML 等等。 违约是 jQuery 尝试并解决的。

$.ajax()文档也对这些内容进行了完整的描述。


在您的特殊情况下,第一个要求 回应UTF-8中,第二个不在乎。另外,第一种方法是将 回应作为一个 JavaScript 对象来处理,第二种方法是将它作为一个字符串来处理。

第一个问题是:

success: function(data) {
// get data, e.g. data.title;
}

第二:

success: function(data) {
alert("Here's lots of data, just a string: " + data);
}

根据 医生:

  • "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-urlencode,因为我们要在消息正文中传递表单参数。 然而,我们并不局限于发送参数,我们可以像这样发送 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 数据。根据针对 dataType 的 JQuery 文档,

Json 类型将获取的数据文件解析为 JavaScript 对象,并且 返回构造的对象作为结果数据。

因此,您在成功处理程序中获得的是正确的 javascript 对象(JQuery 为您转换 json 对象)

然而呢

contentType: "application/json",
dataType: "text",

这里您发送的是 json 数据,因为您没有提到编码,根据 JQuery 文档,

如果没有指定字符集,数据将被传输到服务器 使用服务器的默认字符集; 必须对此进行相应的解码 在服务器端。

而且由于 dataType 被指定为 text,因此您在成功处理程序中获得的是纯文本,如 dataType 的文档所示,

Text 和 xml 类型不经处理就返回数据 只是简单地传递给成功处理程序

当您同时调用两个 API 时,jQueryAjax 加载程序不能很好地工作。要解决这个问题,您必须使用 Ajax 设置中的 isAsync属性逐个调用 API。您还需要确保设置中不会出现任何错误。否则,加载程序将无法工作。例如,POST/PUT/DELETE/GET 调用的未定义内容类型和数据类型。