Nie ma to nic wspólnego z jQuery ani jakimkolwiek dziwactwem kodu skryptu po stronie klienta. Jest to problem po stronie serwera : serwer (aplikacja po stronie) nie wysyła oczekiwanej wartości Content-Type
pola nagłówka HTTP dla zasobu skryptu po stronie klienta. Dzieje się tak, jeśli serwer WWW jest niedostatecznie skonfigurowany, źle skonfigurowany lub aplikacja po stronie serwera (np. PHP) generuje zasób skryptu po stronie klienta.
Odpowiednie typy mediów MIME dla implementacji ECMAScript, takich jak JavaScript, obejmują:
text/javascript
(zarejestrowany jako przestarzały , nieaktualny; ale nadal ważny i najlepiej obsługiwany )
text/ecmascript
(zarejestrowany jako przestarzały , nieaktualny; ale nadal ważny )
application/javascript
application/ecmascript
Oni nie należą application/x-javascript
, jak MIME typy mediów wymienione powyżej są te zarejestrowane w standardach drzewa już (więc nie ma potrzeby, i nie powinno być żadnych Kupię, aby korzystać z nich już eksperymentalne). Por. RFC 4329, „Scripting Media Types” (2005 CE) i mój przypadek testowy: obsługa typów skryptów .
Jednym z rozwiązań jest skonfigurowanie serwera, jeśli to możliwe, jak już zalecono. W przypadku Apache może to być tak proste, jak dodanie dyrektywy
AddType text/javascript .js
(szczegóły w dokumentacji serwera HTTP Apache ).
Ale jeśli zasób skryptu po stronie klienta jest generowany przez aplikację po stronie serwera, taką jak PHP, konieczne jest Content-Type
jawne ustawienie wartości pola nagłówka, ponieważ prawdopodobne jest ustawienie domyślne text/html
:
<?php
header('Content-Type: text/javascript; charset=UTF-8');
// ...
?>
(Te i podobne instrukcje muszą pojawić się przed jakimkolwiek innym wyjściem - patrz instrukcja PHP - w przeciwnym razie treść wiadomości HTTP uważa się za już rozpoczętą i jest za późno, aby wysłać więcej pól nagłówka).
Generowanie po stronie serwera może łatwo przydarzyć się zasobowi skryptu po stronie klienta, nawet jeśli na serwerze znajdują się zwykłe pliki .js, jeśli komentarze zostaną z nich usunięte podczas ich dostarczania, jeśli wszystkie zostaną spakowane w jedną dużą odpowiedź (aby zmniejszyć liczba żądań, które mogą być bardziej wydajne) lub są one minimalizowane przez aplikację po stronie serwera w jakikolwiek inny sposób.