J'ai passé une bonne heure à essayer de comprendre pourquoi diable cela (coffeescript)
$.ajax
accepts: "application/json; charset=utf-8"
fait absolument rien pour changer l'en-tête accepte, alors que ce
$.ajax
dataType: "json"
définit correctement l'en-tête Accept sur application/json; charset=utf-8
Totalement confus, est-ce que je manque quelque chose ou l'acceptation est-elle une blague du poisson d'avril toute l'année?
Comme toujours, le documentation est votre ami:
accepte
Par défaut: dépend du DataType
Le type de contenu envoyé dans l'en-tête de la demande qui indique au serveur le type de réponse qu'il acceptera en retour. Si le paramètre accepte doit être modifié, il est recommandé de le faire une fois dans la méthode $ .ajaxSetup ().
dataType
Par défaut: Intelligent Guess (xml, json, script ou html)
Le type de données que vous attendez du serveur. Si aucun n'est spécifié, jQuery essaiera de le déduire en fonction du type MIME de la réponse (un type XML MIME 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 retourné sous forme de chaîne). Les types disponibles (et le résultat transmis comme premier argument de votre rappel de réussite) sont:
" xml ": Renvoie un document XML qui peut être traité via jQuery.
" html ": renvoie HTML en texte brut; les balises de script incluses sont évaluées lorsqu'elles sont insérées dans le DOM.
" script ": évalue la réponse en JavaScript et la renvoie en texte brut. Désactive la mise en cache en ajoutant un paramètre de chaîne de requête,
_=[TIMESTAMP]
, À l'URL, sauf si l'option de cache est définie sur true. Remarque: Cela transformera les POST en GET pour les demandes de domaine distant." json ": évalue la réponse au format 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 levée. (Voir json.org pour plus d'informations sur le formatage JSON approprié.)
" jsonp ": se charge dans un bloc JSON à l'aide de JSONP. Ajoute un
?callback=?
Supplémentaire à la fin de votre URL pour spécifier le rappel. Désactive la mise en cache en ajoutant un paramètre de chaîne de requête,_=[TIMESTAMP]
, À l'URL, sauf si l'option de cache est définie sur true." text ": Une chaîne de texte brut. plusieurs valeurs séparées par des espaces: à partir de jQuery 1.5, jQuery peut convertir un type de données de ce qu'il a reçu dans l'en-tête Content-Type en ce dont vous avez besoin. Par exemple, si vous souhaitez qu'une réponse textuelle soit traitée comme XML, utilisez " text xml " pour le type de données. Vous pouvez également faire une demande JSONP, la recevoir sous forme de texte et interprétée par jQuery comme XML: "jsonp text xml". De même, une chaîne abrégée telle que "jsonp xml" tentera d'abord de convertir de jsonp en xml, et, à défaut, de convertir de jsonp en texte, puis de texte en xml.
Revenons maintenant à votre problème. Je ne connais pas le cofeescript mais contrairement à dataType
qui est une chaîne, le paramètre accepts
est une carte et doit être utilisé comme ceci:
$.ajax({
url: ...
dataType: 'json',
accepts: {
xml: 'text/xml',
text: 'text/plain'
}
});