您好我正在处理一个必须从第三方提要中提取信息的脚本,该第三方提要返回一个json文件。由于我没有服务器访问权限,因此无法使用CORS,因此根据桌面研究,我被告知使用JSONP。我能够在chrome网络选项卡中看到回调(响应)但我无法读取chrome日志中的文件。关键是当我执行以下代码时,我得到下面的错误消息。我无法关闭mime类型检查。我试着看看其他问题,但找不到类似的东西。 该怎么办?
“拒绝执行来自'https://siteurl.com/json=jsonp&callback=jQuery321030035432758818903_1501098778362&_=1501098778363'的脚本,因为它的MIME类型('application / json')不可执行,并且启用了严格的MIME类型检查。”
<script src="jquery.js"></script>
<script>
$.ajax({
type: 'GET',
url: 'siteurl.com/json?callback=jsonp',
dataType: 'jsonp',
xhrFields: {
withCredentials: false
},
headers: {
"Accept" : "application/json; charset=utf-8",
"Content-Type": "application/javascript; charset=utf-8",
"Access-Control-Allow-Origin" : "*"
},
success: function (result) {
console.log(result);
},
error: function (xhr, errorText) {
console.log('Error ' + xhr.responseText);
}
});
</script>
查看网络标签:
答案 0 :(得分:2)
JSONP不是JSON! JSONP是一个 JavaScript程序,它包含一个带有一个参数的函数调用。
正确的内容类型为application/javascript
。
由于我没有服务器访问权限,因此无法使用CORS,因此根据案头研究,我被告知使用JSONP。
如果网站提供JSONP,您只能使用JSONP。 (现在他们应该使用CORS,它在各方面都更好)。只是在查询字符串中打callback
不会神奇地强制网站提供JSONP并为您打破相同的原始策略。该网站必须明确地将数据公开给其他网站。
答案 1 :(得分:1)
Content-Type存在问题。
内容类型:
application/json
对于JSON是正确的,但不适用于JSONP。内容类型:
application/javascript
适用于JSONP。