在FF和所有,我的javascript工作良好。但在Chrome中,它会给出这样的信息:
资源解释为脚本,但传输与MIME类型文本/纯。
我已经检查了所有的脚本标签,他们都有MIME类型=“文本/javascript”。它甚至说jquery和jquery ui。Chrome出了什么问题?
问题是什么,解决方法是什么?它是我必须改变浏览器的“选项”,还是来自服务器,或者我必须调整我的代码?
在FF和所有,我的javascript工作良好。但在Chrome中,它会给出这样的信息:
资源解释为脚本,但传输与MIME类型文本/纯。
我已经检查了所有的脚本标签,他们都有MIME类型=“文本/javascript”。它甚至说jquery和jquery ui。Chrome出了什么问题?
问题是什么,解决方法是什么?它是我必须改变浏览器的“选项”,还是来自服务器,或者我必须调整我的代码?
当前回答
在我的例子中,服务器发送了正确的内容类型,但内容编码不正确。确保只对gzip压缩的资源设置Content-Encoding: gzip。此外,在我修复了服务器中的头文件(在我的例子中,是谷歌云存储)后,我不得不等待几分钟以正确反映由于缓存造成的更改。
其他回答
在我的例子中,服务器发送了正确的内容类型,但内容编码不正确。确保只对gzip压缩的资源设置Content-Encoding: gzip。此外,在我修复了服务器中的头文件(在我的例子中,是谷歌云存储)后,我不得不等待几分钟以正确反映由于缓存造成的更改。
检查你的js文件是否在服务器上存在。我有这个问题,发现js文件没有上传到服务器,服务器实际上是返回html页面,而不是-这是服务器上配置的默认文档(如default.html)
我遇到了这个问题,我找到了解决它的方法。
当样式(CSS)文件的编码与引用.css文件的PHP文件的编码不同时,就会发生这种情况
例如,使用Unix编码的jQuery.js和使用UTF-8编码的index.php会导致这个问题,所以你必须让它们都是UTF-8或任何其他编码,只要它们是相同的。
这与jQuery或任何客户端脚本代码无关。这是一个服务器端问题:服务器(端应用程序)没有为客户端脚本资源发送预期的HTTP Content-Type报头字段值。如果Web服务器配置不充分、配置错误,或者服务器端应用程序(例如,PHP)正在生成客户端脚本资源,就会发生这种情况。
适合ECMAScript实现(如JavaScript)的MIME媒体类型包括:
文本/javascript(注册为过时,未弃用;但仍然有效,支持最好) Text /ecmascript(注册为过时,未弃用;但仍然有效) 应用程序/ javascript 应用程序/ ecmascript
它们不包括application/x-javascript,因为上面列出的MIME媒体类型现在已经在标准树中注册了(所以没有必要,也不应该再使用实验性的媒体类型)。参考RFC 4329,“脚本媒体类型”(2005 CE)和我的测试用例:对脚本媒体类型的支持。
一种解决方案是尽可能配置服务器,正如已经推荐的那样。对于Apache,这就像添加指令一样简单
AddType text/javascript .js
(详见Apache HTTP Server文档)。
但是如果客户端脚本资源是由服务器端应用程序生成的,比如PHP,那么就有必要显式地设置Content-Type报头字段值,因为默认值可能是text/html:
<?php
header('Content-Type: text/javascript; charset=UTF-8');
// ...
?>
(该语句和类似的语句必须在任何其他输出之前出现-请参阅PHP手册-,否则HTTP消息体被认为已经开始,并且发送更多的报头字段为时已晚。)
客户端脚本资源很容易在服务器端生成,即使服务器上有普通的.js文件,如果在提供注释时从它们中删除注释,如果它们都被打包到一个大响应中(以减少请求的数量,这可能更有效),或者服务器端应用程序以任何其他方式最小化它们。
如果你正在使用Spring MVC, 你可以添加下面的mvn标签来排除Spring Dispatch Servlet中的资源文件
<mvc:resources mapping="/js/*.js" location="/js/"/>
<mvc:resources mapping="/css/*.css" location="/css/"/>
<mvc:resources mapping="/images/*.*" location="/images/"/>