สิ่งนี้ไม่เกี่ยวข้องกับ jQuery หรือสิ่งแปลกปลอมของโค้ดสคริปต์ฝั่งไคลเอ็นต์ เป็นปัญหาฝั่งเซิร์ฟเวอร์ : เซิร์ฟเวอร์ (- แอปพลิเคชันด้าน) ไม่ได้ส่งค่าContent-Type
ฟิลด์ส่วนหัว HTTP ที่คาดไว้สำหรับทรัพยากรสคริปต์ฝั่งไคลเอ็นต์ สิ่งนี้เกิดขึ้นหากเว็บเซิร์ฟเวอร์มีการกำหนดค่าไม่เพียงพอกำหนดค่าผิดพลาดหรือแอปพลิเคชันฝั่งเซิร์ฟเวอร์ (เช่น PHP) กำลังสร้างทรัพยากรสคริปต์ฝั่งไคลเอ็นต์
ประเภทสื่อ MIME ที่เหมาะสมสำหรับการใช้งาน ECMAScript เช่น JavaScript รวมถึง:
text/javascript
(ลงทะเบียนเป็นล้าสมัยไม่เลิกใช้ แต่ยังใช้ได้และสนับสนุนดีที่สุด )
text/ecmascript
(ลงทะเบียนเป็นล้าสมัยไม่เลิกใช้ แต่ยังใช้ได้ )
application/javascript
application/ecmascript
พวกเขาไม่ได้รวมapplication/x-javascript
เป็น MIME ประเภทสื่อดังกล่าวข้างต้นจะเป็นคนที่จดทะเบียนในต้นไม้มาตรฐานโดยขณะนี้ (ดังนั้นจึงไม่มีความจำเป็นและไม่ควรมีความต้องการที่จะใช้คนทดลองอีกต่อไป) cf เลย RFC 4329 "ประเภทการเขียนสคริปต์ Media" (2005 ซีอี) ของฉันและกรณีการทดสอบ: การสนับสนุนสำหรับการเขียนสคริปต์ประเภทสื่อ
ทางออกหนึ่งคือการกำหนดค่าเซิร์ฟเวอร์ถ้าเป็นไปได้ตามที่แนะนำไว้แล้ว สำหรับ Apache สิ่งนี้สามารถทำได้ง่ายเพียงแค่เพิ่มคำสั่ง
AddType text/javascript .js
(ดูเอกสารApache เซิร์ฟเวอร์ Apacheสำหรับรายละเอียด)
แต่ถ้าทรัพยากรสคริปต์ฝั่งไคลเอ็นต์ถูกสร้างขึ้นโดยแอปพลิเคชันฝั่งเซิร์ฟเวอร์เช่น PHP คุณจำเป็นต้องตั้งค่าContent-Type
ฟิลด์ส่วนหัวอย่างชัดเจนเนื่องจากค่าเริ่มต้นน่าจะเป็นtext/html
:
<?php
header('Content-Type: text/javascript; charset=UTF-8');
// ...
?>
(ข้อความนั้นและข้อความที่คล้ายกันต้องมาก่อนเอาต์พุตอื่น - ดูคู่มือ PHP - มิฉะนั้นข้อความ HTTP จะถูกพิจารณาว่าได้เริ่มขึ้นแล้วและมันช้าเกินไปที่จะส่งฟิลด์ส่วนหัวเพิ่มเติม)
การสร้างฝั่งเซิร์ฟเวอร์สามารถเกิดขึ้นได้ง่ายกับทรัพยากรสคริปต์ฝั่งไคลเอ็นต์แม้ว่าคุณจะมีไฟล์. js ธรรมดาบนเซิร์ฟเวอร์หากความคิดเห็นจะถูกลบออกจากพวกเขาตามที่พวกเขาให้บริการหากพวกเขาทั้งหมดบรรจุลงในการตอบสนองขนาดใหญ่ จำนวนคำขอซึ่งอาจมีประสิทธิภาพมากขึ้น) หรือถูกลดขนาดโดยแอ็พพลิเคชันฝั่งเซิร์ฟเวอร์ด้วยวิธีอื่นใด