我正在尝试通过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);
}
});
有人对此有解决方法吗?
通过添加回调参数,您告诉jQuery您想使用脚本元素而不是XMLHttpRequest来请求JSONP。
JSONP不是JSON。这是一个JavaScript程序。
更改服务器,以便为JSONP输出正确的MIME类型,即application/javascript
。
(尽管如此,请不要告诉jQuery您期望使用JSON,因为这是矛盾的:)dataType: 'jsonp'
。
如果您的代理服务器或容器在提供.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类型。
对于记录用户和Google搜索用户,如果您是.NET Core开发人员,则应手动设置内容类型,因为它们的默认值为null或为空:
var provider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
ContentTypeProvider = provider
});
我在使用带有自定义404错误页面的IIS 7.0时遇到了此错误,尽管我怀疑任何404页面都会发生这种情况。服务器返回了无法(正确)执行的具有text / html mime类型的html 404响应。
就我而言,
$.getJSON(url, function(json) { ... });
发出请求(向Flickr的API发送),我得到了相同的MIME错误。就像上面建议的答案一样,添加以下代码:
$.ajaxSetup({ dataType: "jsonp" });
解决了该问题,并且我不再在Chrome的控制台中看到MIME类型错误。
如果应用程序托管在IIS上,请确保已安装“静态内容”。控制面板>程序>打开或关闭Windows功能> Internet信息服务>万维网服务>通用HTTP功能>静态内容。
尝试在新的IIS 10.0安装上运行现有应用程序时遇到了此问题
文章标签:ajax , google-chrome , javascript , jquery , json
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!