由于MIME类型错误,Chrome拒绝执行AJAX脚本

Pau*_*gan 142 javascript ajax jquery json google-chrome

我试图通过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);
    }
});
Run Code Online (Sandbox Code Playgroud)

有人有解决方法吗?

Que*_*tin 70

通过添加一个回调参数,您告诉jQuery您要使用脚本元素而不是使用XMLHttpRequest的JSON请求来请求JSONP.

JSONP不是JSON.这是一个JavaScript程序.

更改您的服务器,以便为JSONP输出正确的MIME类型application/javascript.

(当你在它时,停止告诉jQuery你期待JSON,因为这是矛盾的:) dataType: 'jsonp'.

  • 如果您尝试使用[LinkedIn等外部API],"更改您的服务器"不起作用(http://stackoverflow.com/questions/29177190/display-number-of-linkedin-shares-client-only -without认证). (19认同)

Tom*_*ain 54

如果您的代理服务器或容器在提供.js文件时添加以下标头,则会强制某些浏览器(如Chrome)严格检查MIME类型:

X-Content-Type-Options: nosniff
Run Code Online (Sandbox Code Playgroud)

删除此标头可阻止Chrome执行MIME检查.

  • 不提供Web应用程序中提供的资源的Content-Type标头是不好的做法.从服务器端避免MIME嗅探(使用`X-Content-Type-Options:nosniff`标头)是防止内容嗅探攻击的好选择. (13认同)

Lan*_*nti 11

仅供参考,我从Chrome控制台得到了同样的错误.我以为我的AJAX功能导致它,但我注释掉我的精缩脚本/javascripts/ajax-vanilla.min.js/javascripts/ajax-vanilla.js.但实际上源文件是在/javascripts/src/ajax-vanilla.js.因此,在Chrome中,即使无法找到该文件,您也会收到错误的MIME类型错误.在这种情况下,错误消息被描述为text/plain错误的MIME类型.

  • 你今天救了我1小时冠军!谢谢 (2认同)