我试图通过AJAX将脚本作为JSON访问,这在Safari和其他浏览器上运行良好但不幸的是不能在Chrome中执行 . 它出现以下错误:
拒绝从'*'执行脚本,因为它的MIME类型('application / json')不可执行,并且启用了严格的MIME类型检查 .
这是请求:
$.ajax({
url: "http://some_url/test.json?callback=?",
type: "GET",
dataType: 'json',
cache: true,
success: function (data, status, error) {
console.log('success', data);
},
error: function (data, status, error) {
console.log('error', data, status, error);
}
});
有人有解决方法吗?
7 回答
通过添加一个回调参数,您告诉jQuery您要使用脚本元素而不是使用XMLHttpRequest的JSON请求来请求JSONP .
JSONP不是JSON . 这是一个JavaScript程序 .
更改您的服务器,以便为JSONP输出正确的MIME类型,即
application/javascript
.(当你在它时,停止告诉jQuery你期待JSON,因为这是矛盾的:
dataType: 'jsonp'
) .如果您的代理服务器或容器在提供.js文件时添加以下标头,则会强制某些浏览器(如Chrome)严格检查MIME类型:
删除此标头可阻止Chrome执行MIME检查 .
仅供参考,我从Chrome控制台得到了同样的错误 . 我认为我的AJAX函数导致它,但我将我的缩小脚本从
/javascripts/ajax-vanilla.min.js
取消注释到/javascripts/ajax-vanilla.js
. 但实际上源文件是/javascripts/src/ajax-vanilla.js
. 因此,在Chrome中,即使无法找到该文件,您也会收到错误的MIME类型错误 . 在这种情况下,错误消息被描述为text/plain
错误的MIME类型 .我使用IIS 7.0与自定义404错误页面遇到此错误,但我怀疑这将发生在任何404页面 . 服务器返回了带有text / html mime类型的html 404响应,该类型无法(正确地)执行 .
对于记录和Google搜索用户,如果您是.NET Core开发人员,则应手动设置内容类型,因为它们的默认值为null或为空:
在我的情况下,我使用
发出请求(到Flickr的API),我得到了相同的MIME错误 . 像上面建议的答案一样,添加以下代码:
修复了此问题,我不再在Chrome控制台中看到MIME类型错误 .
如果应用程序托管在IIS上,请确保已安装静态内容 . 控制面板>程序>打开或关闭Windows功能> Internet信息服务>万维网服务>常见HTTP功能>静态内容 .
尝试在新的IIS 10.0安装上运行现有应用程序时遇到此问题