Diferencias entre contentType y dataType en la función jQuery ajax

123

Tengo la siguiente función de devolución de llamada de Jquery y tengo algunas dudas al respecto (no sé muy bien Jquery):

$("form.readXmlForm").submit(function() {
    // Riferimento all'elemento form che ha scatenato il submit 
    var form = $(this);
    // Variabile che contiene il riferimento al bottone clickato 
    var button = form.children(":first");

    $.ajax({        // Viene eseguita la chiamata AJAX 
        type: "POST", // Tipo di richiesta: POST 
        // URL verso quale viene inviata la richiesta
        url: form.attr("action"),    
        // Dati XML inviati: 
        data: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><javaBean><foo>bar</foo><fruit>apple</fruit></javaBean>", 
        // Tipo di media type accettabile dalla response: 
        contentType: "application/xml", 
        dataType: "text", 

        success: function(text) { 
            MvcUtil.showSuccessResponse(text, button); 
        }, 

        error: function(xhr) { 
            MvcUtil.showErrorResponse(xhr.responseText, button); 
        }
    });

Como puede ver, esta función simplemente ejecuta una solicitud AJAX en el backend configurando el parámetro para esta solicitud.

He establecido que estoy enviando la solicitud hacia una URL, que la solicitud es una solicitud POST y que los datos que estoy enviando son la siguiente cadena:

"barapple"

Tengo algunas dificultades para entender cuáles son las diferencias entre contentType y dataType

Creo que contentType especifica el tipo de datos que son aceptables recibidos en la respuesta HTTP, ¿es correcto?

¿Y dataType? ¿Que dice? ¿El tipo de datos que envío en la solicitud HTTP?

En este caso, ¿es "texto" porque estoy enviando una cadena de texto que representa el código XML?

AndreaNobili
fuente
¿El propósito del tipo de contenido y del tipo de datos difiere entre el uso de jQuery y el uso de la API REST?
sofs1

Respuestas:

172

De la documentación :

contentType (predeterminado: 'application / x-www-form-urlencoded; charset = UTF-8')

Tipo: Cadena

Cuando envíe datos al servidor, use este tipo de contenido. El valor predeterminado es "application / x-www-form-urlencoded; charset = UTF-8", que está bien para la mayoría de los casos. Si pasa explícitamente un tipo de contenido a $ .ajax (), siempre se enviará al servidor (incluso si no se envían datos). Si no se especifica un juego de caracteres, los datos se transmitirán al servidor utilizando el juego de caracteres predeterminado del servidor; debe decodificar esto adecuadamente en el lado del servidor.

y:

dataType (predeterminado: Intelligent Guess (xml, json, script o html))

Tipo: Cadena

El tipo de datos que espera del servidor. Si no se especifica ninguno, jQuery intentará inferirlo en función del tipo MIME de la respuesta (un tipo MIME XML generará XML, en 1.4 JSON generará un objeto JavaScript, en 1.4 el script ejecutará el script, y cualquier otra cosa será devuelto como una cadena).

Son esencialmente lo contrario de lo que pensabas que eran.

Anthony Grist
fuente
3
También contentTypeafecta a los encabezados, dataTypeno
Viney
83

ingrese la descripción de la imagen aquí

En inglés:

  • ContentType: Cuando envíe datos al servidor, use este tipo de contenido. El valor predeterminado es application/x-www-form-urlencoded; charset=UTF-8, lo cual está bien para la mayoría de los casos.
  • Accepts: El tipo de contenido enviado en el encabezado de la solicitud que le dice al servidor qué tipo de respuesta aceptará a cambio. Depende DataType.
  • DataType: El tipo de datos que espera del servidor. Si no se especifica ninguno, jQuery intentará inferirlo en función del tipo MIME de la respuesta. Puede ser text, xml, html, script, json, jsonp.
Maria Ines Parnisari
fuente
9
Buena visualización. Gracias.
Dr. MAF