由于错误的MIMEtypes,Chrome拒绝执行AJAX脚本

我试图通过AJAX访问脚本作为JSON,在Safari和其他浏览器上工作正常,但不幸的是不会在Chrome中执行。 它来与以下错误:

拒绝从'*'执行脚本,因为它的MIMEtypes('application / json')是不可执行的,并且启用了严格的MIMEtypes检查。

这是请求:

$.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); } }); 

有没有人有这个解决方法?

通过添加一个callback参数,你告诉jQuery你要使用脚本元素来请求JSONP,而不是使用XMLHttpRequest请求JSON。

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

更改您的服务器,以便为application/javascript JSONP输出正确的MIMEtypes。

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

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

 X-Content-Type-Options: nosniff 

移除此标题可防止Chrome执行MIME检查。

仅供参考,我从Chrome控制台得到同样的错误。 我以为我的AJAX函数导致它,但我取消了我的/javascripts/ajax-vanilla.min.js脚本从/javascripts/ajax-vanilla.min.js/javascripts/ajax-vanilla.js 。 但实际上源文件在/javascripts/src/ajax-vanilla.js 。 所以在Chrome中,即使找不到文件,也会得到错误的MIMEtypes错误。 在这种情况下,错误消息被描述为text/plain错误的MIMEtypes。

我遇到这个错误使用IIS 7.0自定义404错误页面,虽然我怀疑这将发生在任何404页面。 服务器返回一个html 404响应,并且不能(正确)执行一个text / html mimetypes。

在我的情况下,我使用

 $.getJSON(url, function(json) { ... }); 

(Flickr的API)的请求,我得到了相同的MIME错误。 像上面build议的答案一样,添加下面的代码:

 $.ajaxSetup({ dataType: "jsonp" }); 

解决了这个问题,我不再看到Chrome控制台中的MIMEtypes错误。