Điều này không có gì để làm với jQuery hoặc bất kỳ sự giải thích nào về mã tập lệnh phía máy khách. Đây là sự cố phía máy chủ : Máy chủ (ứng dụng bên) không gửi giá trị Content-Type
trường tiêu đề HTTP dự kiến cho tài nguyên tập lệnh phía máy khách. Điều này xảy ra nếu máy chủ Web không được cấu hình đầy đủ, cấu hình sai hoặc ứng dụng phía máy chủ (ví dụ: PHP) đang tạo tài nguyên tập lệnh phía máy khách.
Các loại phương tiện MIME phù hợp để triển khai ECMAScript như JavaScript bao gồm:
text/javascript
(đã đăng ký là lỗi thời , không phản đối; nhưng vẫn hợp lệ và được hỗ trợ tốt nhất )
text/ecmascript
(đã đăng ký là lỗi thời , không được phản đối; nhưng vẫn còn hiệu lực )
application/javascript
application/ecmascript
Chúng không bao gồm application/x-javascript
, vì các loại phương tiện MIME được liệt kê ở trên là những loại được đăng ký trong cây tiêu chuẩn (vì vậy không có nhu cầu và không cần sử dụng loại thử nghiệm nữa). Cf. RFC 4329, "Các loại phương tiện tập lệnh" (2005 CE) và Trường hợp thử nghiệm của tôi : Hỗ trợ cho các loại phương tiện tập lệnh .
Một giải pháp là cấu hình máy chủ nếu có thể, như đã khuyến nghị. Đối với Apache, điều này có thể đơn giản như việc thêm lệnh
AddType text/javascript .js
(xem tài liệu về Máy chủ HTTP Apache để biết chi tiết).
Nhưng nếu tài nguyên tập lệnh phía máy khách được tạo bởi ứng dụng phía máy chủ, như PHP, thì cần phải đặt Content-Type
giá trị trường tiêu đề một cách rõ ràng, vì có khả năng mặc định là text/html
:
<?php
header('Content-Type: text/javascript; charset=UTF-8');
// ...
?>
(Điều đó và các câu lệnh tương tự phải đến trước bất kỳ đầu ra nào khác - xem hướng dẫn sử dụng PHP -, phần khác, phần thân thông điệp HTTP được coi là đã bắt đầu và đã quá muộn để gửi thêm các trường tiêu đề.)
Việc tạo phía máy chủ có thể dễ dàng xảy ra với tài nguyên tập lệnh phía máy khách ngay cả khi bạn có tệp .js đơn giản trên máy chủ, nếu các bình luận bị xóa khỏi chúng khi chúng được phục vụ, nếu tất cả chúng được đóng gói vào một phản hồi lớn (để giảm số lượng yêu cầu, có thể hiệu quả hơn) hoặc chúng được tối thiểu hóa bởi ứng dụng phía máy chủ theo bất kỳ cách nào khác.