Respostas:
contentType
é o cabeçalho HTTP enviado ao servidor, especificando um formato específico. dataType
você está dizendo ao jQuery que tipo de resposta esperar. A $.ajax()
documentação também possui descrições completas.
No seu caso particular, o primeiro está pedindo a resposta para a UTF-8
, o segundo não se importa. Além disso, o primeiro trata a resposta como um objeto JavaScript, o segundo a trata como uma string.
Então o primeiro seria:
success: function(data) {
// get data, e.g. data.title;
}
O segundo:
success: function(data) {
alert("Here's lots of data, just a string: " + data);
}
dataType = ""
?
(ps: a resposta dada por Nick Craver está incorreta)
contentType especifica o formato dos dados enviados ao servidor como parte da solicitação (eles também podem ser enviados como parte da resposta, mais sobre isso posteriormente).
dataType especifica o formato esperado de dados a serem recebidos pelo cliente (navegador).
Ambos não são intercambiáveis.
contentType
é o cabeçalho enviado ao servidor, especificando o formato dos dados (isto é, o conteúdo do corpo da mensagem) que está sendo enviado ao servidor. Isso é usado com solicitações POST e PUT. Normalmente, quando você envia uma solicitação POST, o corpo da mensagem é composto por parâmetros passados, como:==============================
Pedido de amostra:
POST /search HTTP/1.1
Content-Type: application/x-www-form-urlencoded
<<other header>>
name=sam&age=35
==============================
A última linha acima "name = sam & age = 35" é o corpo da mensagem e contentType especifica-o como application / x-www-form-urlencoded, pois estamos passando os parâmetros do formulário no corpo da mensagem. No entanto, não estamos limitados a apenas enviar os parâmetros, podemos enviar json, xml, ... assim (enviar diferentes tipos de dados é especialmente útil nos serviços da web RESTful):
==============================
Pedido de amostra:
POST /orders HTTP/1.1
Content-Type: application/xml
<<other header>>
<order>
<total>$199.02</total>
<date>December 22, 2008 06:56</date>
...
</order>
==============================
Portanto, o ContentType desta vez é: application / xml, porque é isso que estamos enviando. Os exemplos acima mostraram uma solicitação de amostra. Da mesma forma, a resposta enviada do servidor também pode ter o cabeçalho Content-Type especificando o que o servidor está enviando assim:
==============================
resposta da amostra:
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
especifica o formato da resposta a esperar. Está relacionado ao cabeçalho Accept. O JQuery tentará deduzi-lo com base no tipo de conteúdo da resposta.==============================
Pedido de amostra:
GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>
==============================
A solicitação acima está esperando XML do servidor.
Quanto à sua pergunta,
contentType: "application/json; charset=utf-8",
dataType: "json",
Aqui você está enviando dados json usando o conjunto de caracteres UTF8 e espera retornar dados json do servidor. De acordo com os documentos JQuery para dataType,
O tipo json analisa o arquivo de dados buscado como um objeto JavaScript e retorna o objeto construído como os dados do resultado.
Portanto, o que você obtém no manipulador de sucesso é o objeto javascript adequado (o JQuery converte o objeto json para você)
enquanto que
contentType: "application/json",
dataType: "text",
Aqui você está enviando dados json, pois não mencionou a codificação, conforme os documentos do JQuery,
Se nenhum conjunto de caracteres for especificado, os dados serão transmitidos ao servidor usando o conjunto de caracteres padrão do servidor; você deve decodificar isso adequadamente no lado do servidor.
e como dataType é especificado como texto, o que você obtém no manipulador de sucesso é texto sem formatação, conforme os documentos para dataType,
Os tipos de texto e xml retornam os dados sem processamento. Os dados são simplesmente transmitidos ao manipulador de sucesso
conforme documentos :
"json"
: Avalia a resposta como JSON e retorna um objeto JavaScript. No jQuery 1.4, os dados JSON são analisados de maneira estrita; qualquer JSON malformado é rejeitado e um erro de análise é gerado. (Consulte json.org para obter mais informações sobre a formatação JSON adequada.)"text"
: Uma sequência de texto simples.O carregador do jQuery Ajax não está funcionando bem quando você chama duas APIs simultaneamente. Para resolver esse problema, é necessário chamar as APIs uma por uma usando a isAsync
propriedade na configuração Ajax. Você também precisa garantir que não haja nenhum erro na configuração. Caso contrário, o carregador não funcionará. Por exemplo, tipo de conteúdo indefinido e tipo de dados para chamadas POST / PUT / DELETE / GET.