Cela n'a rien à voir avec jQuery ou toute bizarrerie de code de script côté client. Il s'agit d'un problème côté serveur : le serveur (application côté) n'envoie pas la valeur de Content-Type
champ d'en-tête HTTP attendue pour la ressource de script côté client. Cela se produit si le serveur Web est insuffisamment configuré, mal configuré ou si une application côté serveur (par exemple, PHP) génère la ressource de script côté client.
Les types de média MIME appropriés pour les implémentations ECMAScript comme JavaScript incluent:
text/javascript
(enregistré comme obsolète , non obsolète, mais toujours valide et mieux pris en charge )
text/ecmascript
(enregistré comme obsolète , non obsolète, mais toujours valide )
application/javascript
application/ecmascript
Ils ne pas comprennent application/x-javascript
, comme les types de support MIME listés ci - dessus sont ceux enregistrés dans l'arborescence des normes maintenant (il n'y a donc pas besoin, et il ne devrait pas besoin, d'utiliser les plus expérimentales). Cf. RFC 4329, "Scripting Media Types" (2005 CE) et mon scénario de test: prise en charge des scripts de types de supports .
Une solution consiste à configurer le serveur si possible, comme déjà recommandé. Pour Apache, cela peut être aussi simple que d'ajouter la directive
AddType text/javascript .js
(voir la documentation Apache HTTP Server pour plus de détails).
Mais si la ressource de script côté client est générée par une application côté serveur, comme PHP, il est nécessaire de définir Content-Type
explicitement la valeur du champ d'en-tête, car la valeur par défaut est probable text/html
:
<?php
header('Content-Type: text/javascript; charset=UTF-8');
// ...
?>
(Cela et des instructions similaires doivent précéder toute autre sortie - voir le manuel PHP -, sinon le corps du message HTTP est considéré comme ayant déjà commencé et il est trop tard pour envoyer plus de champs d'en-tête.)
La génération côté serveur peut arriver facilement à une ressource de script côté client même si vous avez des fichiers .js simples sur le serveur, si les commentaires leur sont supprimés lorsqu'ils sont servis, s'ils sont tous regroupés dans une seule grande réponse (pour réduire la nombre de requêtes, qui peut être plus efficace), ou elles sont minimisées par l’application côté serveur de toute autre manière.