JSONP脚本返回MIME类型错误

时间:2017-07-27 10:38:17

标签: javascript json ajax

您好我正在处理一个必须从第三方提要中提取信息的脚本,该第三方提要返回一个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>

查看网络标签:

Network tab view

2 个答案:

答案 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。

请检查:What is the correct JSON content type?