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

我正在尝试通过 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);
}
});

有人能解决这个问题吗?

322714 次浏览

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

JSONP 不是 JSON,它是一个 JavaScript 程序。

更改服务器,使其输出 JSONP 的正确 MIME 类型,即 application/javascript

(当你这样做的时候,不要告诉 jQuery 你期待的是 JSON,因为这是相互矛盾的: dataType: 'jsonp')。

对我来说,我用

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

发出请求(到 Flickr 的 API) ,我得到了相同的 MIME 错误。 如上所述,添加以下代码:

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

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

方法时,如果代理服务器或容器添加以下标头。Js 文件,它将强制一些浏览器如 Chrome 执行严格的 MIME 类型检查:

X-Content-Type-Options: nosniff

删除这个头部以防止 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响应,该类型无法(正确地)执行。

根据记录和谷歌搜索用户, 如果你是一个。NET 核心开发人员,您应该手动设置内容类型,因为它们的默认值为 null 或空:

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

如果应用程序驻留在 IIS 上,请确保安装了静态内容。控制面板 > 程序 > 开启或关闭视窗功能 > 互联网资讯服务 > 万维网服务 > 常见 HTTP 功能 > 静态内容。

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