$ .ajax - dataType

时间:2010-04-27 15:52:58

标签: jquery

之间有什么区别
contentType: "application/json; charset=utf-8",
dataType: "json",

VS

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

4 个答案:

答案 0 :(得分:164)

  • contentType是发送到服务器的标头,指定特定格式。
    • 示例:我正在发送json或XML
  • dataType你告诉jQuery期待什么样的回应。
    • 期待JSON,XML或HTML等...... jQuery的默认设置是试图找出它。

The $.ajax() documentation也有完整的描述。

在您的特定情况下,第一个是要求回复在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 :(得分: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&amp; 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文档,

  

如果未指定charset,则数据将传输到服务器   使用服务器的默认字符集;你必须适当地解码它   在服务器端。

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

  

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

答案 2 :(得分:6)

根据docs

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

答案 3 :(得分:2)

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