$ .ajax – dataType

有什么区别

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

 contentType: "application/json", dataType: "text", 
  • contentType是发送到服务器的标题,指定一个特定的格式。
    • 例如:我发送json或XML
  • dataType是告诉jQuery期待什么样的回应。
    • 期望JSON,或者XML,或者HTML,等等…… jQuery的默认设置是想要弄明白的。

$.ajax()文档也有这些的完整描述。

在你的具体情况下,第一个是要求响应是utf-8 ,第二个不关心。 另外,第一个将响应视为一个JavaScript对象,第二个将把它当作一个string。

所以第一个是:

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

第二:

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

(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等…(发送不同types的数据对于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文档,

jsontypes将获取的数据文件parsing为JavaScript对象,并将构造的对象作为结果数据返回。

所以你在成功处理程序中得到的是正确的JavaScript对象(JQuery为你转换json对象)

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

在这里你发送json数据,因为你没有提到编码,按照JQuery文档,

如果未指定字符集,则会使用服务器的默认字符集将数据传输到服务器; 您必须在服务器端正确解码。

并且由于dataType被指定为文本,所以你在成功处理程序中得到的是纯文本,按照dataType的文档,

text和xmltypes返回没有处理的数据。 数据只是传递给成功处理程序

按照文档 :

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

当你同时调用两个API时,jquery ajax loader运行的不好。 解决这个问题。 您必须使用ajax设置中的“isAsync”属性逐个调用API。 您还需要确保在设置中不应该有任何错误,否则加载程序将无法正常工作。 例如未定义的内容types,POST / PUT / DELETE / GET调用的数据types。