当我从索引中调用JavaScript文件时,我遇到了这个问题。这是我的JavaScript文件(jQuery):
$(document).ready(function(){
$.getJSON("https://api.blockchain.info/pools?timespan=5days&callback=?", function(result){
});
});
这是我尝试从API获取json文件时得到的错误:
Refused to execute script from 'https://api.blockchain.info/pools?
timespan=5days&callback=jQuery33105603115327243822_1528663793253&_=1528663793254
' because its MIME type ('application/json') is not executable, and strict MIME type checking is enabled.
提前感谢!
发布于 2018-06-11 05:37:05
您正在尝试使用一种称为JSON-P的老套方法来绕过跨域限制。
基本上,这是通过将一个<script>
元素注入到具有指定URL的页面中来实现的。在全局空间中设置一个带有自动生成的名称(由jQuery生成)的回调。服务器在查询字符串中看到这个callback=someCallback
参数,它返回的不是JSON,而是JavaScript,如下所示:
someCallback(...data...);
然后,浏览器像执行其他脚本一样执行此脚本,使用结果数据调用回调,一切正常。
除了返回的数据之外,几乎每个HTTP响应都有一些头部。其中之一是Content-Type
,它向浏览器表明它正在获取哪种类型的数据,以便它知道如何处理这些数据。可执行JavaScript的Content-Type
(通常称为MIME类型)通常为application/javascript
。正如错误消息所说,application/json
是不可执行的。
问题是两件事中的一件:
JSON API不支持JSON-p。(而且,它也不应该支持JSON-p!CORS现在得到了很好的支持,不需要JSON-P。)试着删除那个callback
参数,看看会发生什么。根据我所看到的响应,这就是问题所在。
Content-Type
-P,但在其响应头中返回了错误的JSON值。(如果这是您的问题,那么除了代理响应之外,您将无能为力。但这不是您的问题所在。)https://stackoverflow.com/questions/50788037
复制相似问题