200 votes

Qu'est-ce que le type de contenu et le type de données dans une requête AJAX?

Qu'est-ce que le type de contenu et le type de données dans une requête POST? Supposons que j'ai ceci :

$.ajax({
    type : "POST",
    url : /v1/user,
    datatype : "application/json",
    contentType: "text/plain",
    success : function() {

    },
    error : function(error) {

    },

Est-ce que contentType est ce que nous envoyons? Donc ce que nous envoyons dans l'exemple ci-dessus est du JSON et ce que nous recevons est du texte brut? Je ne comprends pas vraiment.

341voto

Joe Enos Points 17442

contentType est le type de données que vous envoyez, donc application/json; charset=utf-8 est courant, tout comme application/x-www-form-urlencoded; charset=UTF-8, qui est la valeur par défaut.

dataType est ce que vous attendez en retour du serveur : json, html, text, etc. jQuery l'utilisera pour déterminer comment remplir le paramètre de la fonction de succès.

Si vous envoyez quelque chose comme :

{"name":"John Doe"}

et attendez en retour :

{"success":true}

Alors vous devriez avoir :

var data = {"name":"John Doe"}
$.ajax({
    dataType : "json",
    contentType: "application/json; charset=utf-8",
    data : JSON.stringify(data),
    success : function(result) {
        alert(result.success); // result est un objet créé à partir du JSON retourné
    },
});

Si vous attendez ce qui suit :

SUCCESS!!!

Alors vous devriez faire :

var data = {"name":"John Doe"}
$.ajax({
    dataType : "html",
    contentType: "application/json; charset=utf-8",
    data : JSON.stringify(data),
    success : function(result) {
        jQuery("#someContainer").html(result); // result est le texte HTML
    },
});

Encore une chose - si vous voulez envoyer :

name=John&age=34

Alors ne stringify pas les données, et faites :

var data = {"name":"John", "age": 34}
$.ajax({
    dataType : "html",
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", // c'est la valeur par défaut, donc c'est facultatif
    data : data,
    success : function(result) {
        jQuery("#someContainer").html(result); // result est le texte HTML
    },
});

36voto

Richard Dalton Points 20402

De la documentation jQuery - http://api.jquery.com/jQuery.ajax/

contentType Lors de l'envoi de données au serveur, utilisez ce type de contenu.

dataType Le type de données que vous attendez en retour du serveur. Si aucun n'est spécifié, jQuery essaiera de l'inférer en se basant sur le type MIME de la réponse

"text": une chaîne de texte brut.

Donc vous voulez que contentType soit application/json et dataType soit text:

$.ajax({
    type : "POST",
    url : /v1/user,
    dataType : "text",
    contentType: "application/json",
    data : dataAttribute,
    success : function() {

    },
    error : function(error) {

    }
});

3voto

Jono Points 1540

Consultez http://api.jquery.com/jQuery.ajax/, il y est question de datatype et de contentType.

Ils sont tous les deux utilisés dans la requête au serveur pour que celui-ci sache quel type de données recevoir/envoyer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X