2010-04-27 9 views
101

¿cuál es la diferencia entre

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

vs

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

Respuesta

141
  • contentType es la cabecera se envía al servidor, que especifica un formato particular.
    • Ejemplo: Estoy enviando JSON o XML
  • dataType se le dice jQuery qué tipo de respuesta que puede esperar.
    • Esperando JSON, o XML, o HTML, etc. ... el valor predeterminado para que jQuery intente resolverlo.

The $.ajax() documentation tiene una descripción completa de estos también.

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

Así que la primera sería:

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

La segunda:

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

cuál es la forma más preferida o más recomendada. –

+1

@Adu - No hay respuesta directa para eso, depende de lo que quiera hacer con el resultado ... están haciendo 2 cosas diferentes. Idealmente, a menos que sea un resultado muy simple, es probable que desee tratar con JSON, en cuyo caso el primero sería más fácil. –

+0

Esto no es correcto – Musa

6

según docs:

  • "json": evalúa la respuesta JSON y devuelve un objeto de 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 formateo JSON correcto).
  • "text": Una cadena de texto sin formato.
47

(ps: 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 (que se puede enviar como parte de la respuesta también, más en eso más tarde).

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

Ambos no son intercambiables.

  • contentType es la cabecera se envía al servidor, que especifica el formato de los datos (es decir, el contenido de cuerpo del mensaje) ser ser al servidor. Esto se usa con solicitudes POST y PUT.Por lo general, cuando u envía la solicitud POST, el cuerpo del mensaje se compone de pasado en parámetros tales como:

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

solicitud

muestra:

POST /search HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
<<other header>> 

name=sam&age=35 

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

La última línea arriba "nombre = sam & edad = 35" es el cuerpo del mensaje y contentType lo especifica como application/x-www-form-urlencoded ya que estamos pasando el formulario paramet en el cuerpo del mensaje. Sin embargo, no estamos limitados a sólo el envío de los parámetros, podemos enviar JSON, XML, ... como esto (el envío de diferentes tipos de datos es especialmente útil con los servicios web RESTful):

====== ======================== solicitud

muestra:

POST /orders HTTP/1.1 
Content-Type: application/xml 
<<other header>> 

<order> 
    <total>$199.02</total> 
    <date>December 22, 2008 06:56</date> 
... 
</order> 

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

Así que el ContentType esta vez es: application/xml, porque eso es lo que estamos enviando. Los ejemplos anteriores mostraron muestra, de manera similar la respuesta enviar desde el servidor también puede tener la cabecera Content-Type especifica lo que el servidor está enviando de esta manera:

============== ================ respuesta

muestra:

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 el formato de respuesta a esperar. Está relacionado con el encabezado Aceptar. JQuery intentará inferirlo en función del tipo de contenido de la respuesta.

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

solicitud

muestra:

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

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

La solicitud anterior está esperando XML del servidor.

cuanto a su pregunta,

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

Aquí están enviando datos JSON utilizando el conjunto de caracteres UTF-8, y tambien los que los datos JSON desde el servidor. Según los docs JQuery para tipo de datos,

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

Así que lo que se obtiene en el manejador de éxito es objeto de javascript adecuada (jQuery convierte el objeto JSON para usted)

mientras que

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

Aquí está enviando datos JSON, ya que no tiene mencionó la codificación, según los documentos de JQuery,

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

y como se especifica tipo de datos como texto, lo que se obtiene en el manejador de éxito es texto plano, según la documentación para tipoDatos,

Los tipos de texto y xml devolver los datos sin procesamiento. Los datos son simplemente pasados ​​al controlador de éxito

1

Jquery ajax loader no funciona bien cuando llama a dos API simultáneamente. para resolver este problema tienes que llamar a las API una a una usando la propiedad 'isAsync' en la configuración 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.

+0

Si proporciona una mejor descripción, esta es una buena respuesta ... por favor ponga más información en esta publicación. – wahwahwah