$ .ajax-数据类型


135

之间有什么区别

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

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

Answers:


181
  • 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);
}

1
哪一种是更优选的方式或最推荐的方式。
尼克·卡恩

1
@Adu-对此没有直接答案,取决于您要对结果做些什么...他们正在做2种不同的事情。理想情况下,除非得到非常简单的结果,否则您可能希望处理JSON,在这种情况下,第一个会更容易。
尼克·克拉弗

2
Musa是正确的,contentType表示我们要发送到服务器的格式(即帖子正文),而不是要求返回的格式。
antinome

@antinome那两个通常是非常连接的,在这里很多地方的Stack Overflow都很重要。严格来说,它们是独立的,我对此进行了更新以反映这一点。
尼克·克拉弗

我仍然没有地方可以找到默认值,我的意思是我要手动操作,并在每次调用后重建对象,但是在重置时,我有问题。如果我将其默认设置为“ json”,则绝不会补充智能猜测,但它会在一定程度上起作用,直到到达我未指定的调用为止(这本身不是JSON调用),然后如果我将其设置为空字符串或null,似乎会破坏一切。我可以在f的基础上在“ Intelligent Guess”中将其设置为“ default”或“ f”吗?什么是技术默认值,即在两个引号之间定义dataType = ""
blamb 2015年

51

(ps:Nick Craver给出的答案不正确)

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数据。根据dataType的JQuery文档,

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

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

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

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

如果未指定字符集,则将使用服务器的默认字符集将数据传输到服务器。您必须在服务器端对此进行适当解码。

并且由于dataType被指定为文本,因此根据dataType的文档,成功处理程序中获得的是纯文本,

text和xml类型不处理就返回数据。数据简单地传递给成功处理程序


7

根据文档

  • "json":将响应评估为JSON并返回一个JavaScript对象。在jQuery 1.4中,以严格的方式解析JSON数据。任何格式错误的JSON都会被拒绝,并引发解析错误。(有关正确的JSON格式的更多信息,请参见json.org。)
  • "text":纯文本字符串。

2

当您同时调用两个API时,jQuery Ajax加载程序无法正常工作。要解决此问题,您必须使用isAsyncAjax设置中的属性来逐个调用API 。您还需要确保设置中没有任何错误。否则,加载程序将无法工作。例如POST / PUT / DELETE / GET调用的未定义内容类型,数据类型。


如果您提供更好的描述,这是一个很好的答案...请在这篇文章中添加更多信息。
wahwahwah
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.