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

时间:2014-07-02 09:59:53

标签: javascript jquery ajax 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);
    }
});

有没有人有解决方法呢?

7 个答案:

答案 0 :(得分:68)

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

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

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

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

答案 1 :(得分:53)

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

X-Content-Type-Options: nosniff

删除此标头以阻止Chrome执行MIME检查。

答案 2 :(得分:10)

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

答案 3 :(得分:1)

我在使用带有自定义404错误页面的IIS 7.0时遇到此错误,但我怀疑任何404页面都会发生这种情况。服务器返回了一个带有text / html mime类型的html 404响应,该类型无法(正确地)执行。

答案 4 :(得分:1)

对于记录和Google搜索用户, 如果您是.NET Core开发人员,则应手动设置内容类型,因为它们的默认值为null或为空:

var provider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});

答案 5 :(得分:0)

在我的情况下,我使用

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

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

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

修复了问题,我不再在Chrome控制台中看到MIME类型错误。

答案 6 :(得分:0)

如果应用程序托管在IIS上,请确保已安装静态内容。控制面板>程序>打开或关闭Windows功能> Internet信息服务>万维网服务>通用HTTP功能>静态内容。

尝试在新的IIS 10.0安装上运行现有应用程序时遇到了这个问题