Différences entre contentType et dataType dans la fonction jQuery ajax

123

J'ai la fonction de rappel Jquery suivante et j'ai un petit doute à ce sujet (je ne connais pas très 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); 
        }
    });

Comme vous pouvez le voir, cette fonction exécute simplement une requête AJAX au backend en définissant le paramètre de cette requête.

J'ai défini que j'envoie la demande vers une URL, que la demande est une demande POST et que les données que j'envoie sont la chaîne suivante:

"barapple"

J'ai quelques difficultés à comprendre quelles sont les différences entre contentType et dataType

Je pense que contentType spécifie le type de données acceptables reçues dans la réponse HTTP, n'est-ce pas?

Et dataType? Que dire? Le type de données que j'envoie dans la requête HTTP?

Dans ce cas, est-ce que c'est "texte" parce que j'envoie une chaîne textuelle qui représente le code XML?

AndreaNobili
la source
Le but du type de contenu et du type de données est-il différent entre l'utilisation de jQuery et l'utilisation de l'API REST?
sofs1

Réponses:

172

De la documentation :

contentType (par défaut: 'application / x-www-form-urlencoded; charset = UTF-8')

Type: Chaîne

Lors de l'envoi de données au serveur, utilisez ce type de contenu. La valeur par défaut est "application / x-www-form-urlencoded; charset = UTF-8", ce qui convient dans la plupart des cas. Si vous passez explicitement un type de contenu à $ .ajax (), il sera toujours envoyé au serveur (même si aucune donnée n'est envoyée). Si aucun jeu de caractères n'est spécifié, les données seront transmises au serveur en utilisant le jeu de caractères par défaut du serveur; vous devez le décoder de manière appropriée côté serveur.

et:

dataType (par défaut: Intelligent Guess (xml, json, script ou html))

Type: Chaîne

Le type de données que vous attendez du serveur. Si aucun n'est spécifié, jQuery essaiera de l'inférer en fonction du type MIME de la réponse (un type MIME XML produira du XML, en 1.4 JSON produira un objet JavaScript, en 1.4 le script exécutera le script, et tout le reste sera renvoyé sous forme de chaîne).

Ils sont essentiellement le contraire de ce que vous pensiez qu'ils étaient.

Anthony Grist
la source
3
contentTypeAffecte également les en-têtes, dataTypene le fait pas
Viney
83

entrez la description de l'image ici

En anglais:

  • ContentType: Lors de l'envoi de données au serveur, utilisez ce type de contenu. La valeur par défaut est application/x-www-form-urlencoded; charset=UTF-8, ce qui convient dans la plupart des cas.
  • Accepts: Le type de contenu envoyé dans l'en-tête de la requête qui indique au serveur quel type de réponse il acceptera en retour. Cela dépend DataType.
  • DataType: Le type de données que vous attendez du serveur. Si aucun n'est spécifié, jQuery essaiera de l'inférer en fonction du type MIME de la réponse. Peut être text, xml, html, script, json, jsonp.
Maria Ines Parnisari
la source
9
Belle visualisation. Merci.
Dr. MAF