$ .ajax – dataType

Cuál es la diferencia entre

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

vs.

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

  • contentType es el encabezado enviado al servidor, especificando un formato particular.
    • Ejemplo: estoy enviando json o XML
  • dataType está diciendo a jQuery qué tipo de respuesta esperar.
    • Esperando JSON, o XML, o HTML, etc. … el valor predeterminado para que jQuery lo intente y lo resuelva.

La documentación $.ajax() tiene una descripción completa de estos también.

En su caso particular, el primero es pedir que la respuesta esté en utf-8 , a la segunda no le importa. También el primero trata la respuesta como un objeto javascript, el segundo lo va a tratar como una cadena.

Entonces el primero sería:

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

El segundo:

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

(pd: la respuesta dada por Nick Craver es incorrecta)

contentType especifica el formato de los datos que se envían al servidor como parte de la solicitud (también se puede enviar como parte de la respuesta, más sobre esto más adelante).

dataType especifica el formato esperado de los datos que debe recibir el cliente (navegador).

Ambos no son intercambiables.

  • contentType es el encabezado enviado al servidor, que especifica el formato de los datos (es decir, el contenido del cuerpo del mensaje) que está siendo enviado al servidor. Esto se usa con solicitudes POST y PUT. Por lo general, cuando envía la solicitud POST, el cuerpo del mensaje se compone de parámetros pasados ​​como:

===========================

Solicitud de muestra:

 POST /search HTTP/1.1 Content-Type: application/x-www-form-urlencoded < > name=sam&age=35 

===========================

La última línea arriba de “name = sam & age = 35” es el cuerpo del mensaje y contentType lo especifica como application / x-www-form-urlencoded ya que estamos pasando los parámetros de formulario en el cuerpo del mensaje. Sin embargo, no estamos limitados a solo enviar los parámetros, podemos enviar json, xml, … así (el envío de diferentes tipos de datos es especialmente útil con los servicios web RESTful):

===========================

Solicitud de muestra:

 POST /orders HTTP/1.1 Content-Type: application/xml < >  $199.02 December 22, 2008 06:56 ...  

===========================

Entonces el ContentType esta vez es: application / xml, porque eso es lo que estamos enviando. Los ejemplos anteriores mostraron una solicitud de muestra, de manera similar, la respuesta enviada desde el servidor también puede tener el encabezado Content-Type especificando lo que el servidor está enviando así:

===========================

respuesta de muestra:

 HTTP/1.1 201 Created Content-Type: application/xml < >   $199.02 December 22, 2008 06:56 ...  

===========================

  • dataType especifica el formato de respuesta esperado. Está relacionado con el encabezado Aceptar. JQuery intentará inferirlo en función del tipo de contenido de la respuesta.

===========================

Solicitud de muestra:

 GET /someFolder/index.html HTTP/1.1 Host: mysite.org Accept: application/xml < > 

===========================

La solicitud anterior está esperando XML del servidor.

Con respecto a su pregunta,

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

Aquí está enviando datos json utilizando el juego de caracteres UTF8, y espera datos de respaldo del servidor. De acuerdo con los documentos de JQuery para dataType,

El tipo json analiza el archivo de datos recuperados como un objeto de JavaScript y devuelve el objeto construido como los datos de resultado.

Entonces, lo que obtienes en el controlador de éxito es el objeto JavaScript adecuado (JQuery convierte el objeto json por ti)

mientras

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

Aquí está enviando datos json, ya que no ha mencionado la encoding, según los documentos de JQuery,

Si no se especifica ningún juego de caracteres, los datos se transmitirán al servidor utilizando el conjunto de caracteres predeterminado del servidor; debe decodificar esto apropiadamente en el lado del servidor.

y dado que dataType se especifica como texto, lo que se obtiene en el controlador de éxito es texto sin formato, según los documentos para dataType,

Los tipos de texto y xml devuelven los datos sin procesamiento. Los datos simplemente se pasan al controlador de éxito

según los documentos :

  • "json" : Evalúa la respuesta como JSON y devuelve un objeto JavaScript. En jQuery 1.4, los datos JSON se analizan de manera estricta; cualquier JSON malformado es rechazado y se produce un error de análisis. (Consulte json.org para obtener más información sobre el formato JSON adecuado).
  • "text" : una cadena de texto sin formato.

El cargador jQuery Ajax no funciona bien cuando llamas a dos API simultáneamente. Para resolver este problema, debe llamar a las API una por una utilizando la propiedad isAsync en la configuración de Ajax. También debe asegurarse de que no haya ningún error en la configuración. De lo contrario, el cargador no funcionará. Por ejemplo, tipo de contenido indefinido, tipo de datos para la llamada POST / PUT / DELETE / GET.