web-dev-qa-db-fra.com

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

J'ai la fonction de rappel Jquery suivante et j’ai un léger 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 constater, cette fonction exécute simplement une requête AJAX au serveur définissant le paramètre pour 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 acceptées 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, is is "text" parce que j'envoie une chaîne textuelle qui représente le code XML?

115
AndreaNobili

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 est correct 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 à l'aide du 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 tentera de l'inférer en fonction du type MIME de la réponse (un type XML MIME donnera XML, dans JSON 1.4 un objet JavaScript, dans un script 1.4, le script sera exécuté et tout le reste sera retourné sous forme de chaîne).

Ils sont essentiellement le contraire de ce que vous pensiez.

161
Anthony Grist

enter image description here

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 indiquant au serveur le type de réponse qu'il acceptera en retour. Dépend de DataType.
  • DataType: Le type de données que vous attendez du serveur. Si aucun n'est spécifié, jQuery tentera de l'inférer en fonction du type MIME de la réponse. Peut être text, xml, html, script, json, jsonp.
77