153 votes

$.ajax - dataType

Quelle est la différence entre

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

vs.

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

209voto

Nick Craver Points 313913
  • contentType est l'en-tête envoyé au serveur, spécifiant un format particulier.
    • Exemple : J'envoie du json ou du XML
  • dataType c'est dire à jQuery quel type de réponse il doit attendre.
    • En attendant JSON, ou XML, ou HTML, etc.... le défaut c'est pour jQuery d'essayer de le comprendre.

Le site $.ajax() documentation a également des descriptions complètes de ces derniers.

Dans votre cas particulier, la première demande que la réponse soit en format utf-8 le second s'en moque. De plus, la première traite la réponse comme un objet javascript, la seconde va la traiter comme une chaîne de caractères.

Donc la première serait :

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

La seconde :

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

54voto

nash era Points 161

(ps : la réponse donnée par Nick Craver est incorrecte)

contentType spécifie le format des données envoyées au serveur dans le cadre de la demande (il peut également être envoyé dans le cadre de la réponse, nous y reviendrons plus tard).

dataType spécifie le format attendu des données à recevoir par le client (navigateur).

Les deux ne sont pas interchangeables.

  • contentType est l'en-tête envoyé au serveur, spécifiant le format des données (c'est-à-dire le contenu du corps du message) envoyées au serveur. Il est utilisé avec les requêtes POST et PUT. Habituellement, lorsque vous envoyez une requête POST, le corps du message comprend des paramètres passés comme :

\==============================

Demande d'échantillon :

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

name=sam&age=35

\==============================

La dernière ligne au-dessus de "name=sam&age=35" est le corps du message et contentType le spécifie comme application/x-www-form-urlencoded puisque nous passons les paramètres du formulaire dans le corps du message. Cependant, nous ne sommes pas limités à l'envoi des paramètres, nous pouvons envoyer json, xml,... comme ceci (l'envoi de différents types de données est particulièrement utile avec les services web RESTful) :

\==============================

Demande d'échantillon :

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

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

\==============================

Le ContentType est donc cette fois : application/xml, car c'est ce que nous envoyons. Les exemples ci-dessus ont montré des exemples de requêtes, de la même manière la réponse envoyée par le serveur peut également avoir l'en-tête Content-Type spécifiant ce que le serveur envoie comme ceci :

\==============================

réponse de l'échantillon :

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 spécifie le format de la réponse à attendre. Il est lié à l'en-tête Accept. JQuery essaiera de le déduire en se basant sur le Content-Type de la réponse.

\==============================

Demande d'échantillon :

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

\==============================

La requête ci-dessus attend du serveur un fichier XML.

En ce qui concerne votre question,

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

Ici, vous envoyez des données json en utilisant le jeu de caractères UTF8, et vous attendez des données json en retour du serveur. Selon la documentation de JQuery pour dataType,

Le type json analyse le fichier de données récupéré sous forme d'un objet JavaScript et renvoie l'objet construit comme données de résultat.

Ainsi, ce que vous obtenez dans le gestionnaire de succès est un objet javascript approprié (JQuery convertit l'objet json pour vous).

alors que

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

Ici, vous envoyez des données json, puisque vous n'avez pas mentionné l'encodage, conformément à la documentation de JQuery,

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. en utilisant le jeu de caractères par défaut du serveur ; vous devez le décoder de manière appropriée du côté du serveur.

et puisque le type de données est spécifié comme étant du texte, ce que vous obtenez dans le gestionnaire de succès est du texte brut, conformément aux documents relatifs au type de données,

Les types text et xml renvoient les données sans traitement. Les données sont simplement transmises au gestionnaire de succès

7voto

SilentGhost Points 79627

Selon docs :

  • "json" : Évalue la réponse en tant que JSON et renvoie un objet JavaScript. Dans jQuery 1.4, les données JSON sont analysées de manière stricte ; tout JSON mal formé est rejeté et une erreur d'analyse est signalée. (Voir json.org pour plus d'informations sur le formatage correct de JSON).
  • "text" : Une chaîne de texte en clair.

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