javascript:MIME类型(' text / html')不可执行,并且启用了严格的MIME类型检查

时间:2016-08-01 19:00:54

标签: javascript ajax api spotify

我正在尝试向Spotify Api提出简单的获取授权请求。如果我进行GET HTTPRequest,那么我会遇到跨域错误。因此,我使用回调发出JSONP请求,但这会导致MIME类型错误,如上所示,我找到的解决方法是再次发出HTTPRequest JSON请求以匹配MIME类型。我在这里相当僵局!请帮忙!谢谢

这是我的js代码块:

(function(){
    var script = document.createElement('script');
    script.src = 'https://accounts.spotify.com/authorize?client_id=CLIENT_ID&response_type=code&redirect_uri=https://samcasm.github.io/moodsetNow/moodset.html&scope=user-read-private%20user-read-email&state=34fFs29kd09?callback=mySpotify';
    document.getElementsByTagName('body')[0].appendChild(script);
})();

function mySpotify(){
console.log(response);
}

1 个答案:

答案 0 :(得分:3)

您的问题似乎是您正在使用<script>标记来加载HTML页面。这是我建议的解决方案:

  1. 当用户需要进行身份验证时,请重定向:

    location.href = "https://accounts.spotify.com/authorize" + 
        "?client_id=" + CLIENT_ID +
        "&response_type=token" + 
        "&redirect_uri=" + encodeURIComponent(THE_URI_TO_REDIRECT_TO) + 
        "&state=" + STATE + // optional
        "&scope=" + SCOPES.join(" ") + // optional
        "";
    

    请注意,如果您要在页面加载时重定向,请使用location.replace(...)代替location.href = ...。这样,用户就不会在其后退按钮历史记录中显示重定向页面。

  2. 然后,在THE_URI_TO_REDIRECT_TO中的URL处,解析哈希:
    Spotify会像这样制作一个哈希:#access_token=...&expiry=...location.hash返回该哈希值,包括前导#。首先,我们设置了包含选项的对象:

    var hash = {};
    

    然后,我们删除#

    var h = location.hash.slice(1)
    

    ...并在& s上拆分。

    h = h.split('&')
    

    接下来,我们迭代所有对(forEach)并将这两个对象放在hash对象中(即hash['access_token'] = '...';

    h.forEach(function(pair) {
        pair = pair.split('=');
        hash[pair.shift()] = pair.join('=');
    });
    
  3. 之后,您可以阅读数据。

    if (hash.error) {
        console.log(hash.error);
    } else {
        var token = hash.access_token;
        hash.token_type === "Bearer";
        var expiry = new Date();
        expiry.setSeconds(expiry.getSeconds() + (+hash.expires_in));
    }
    var state = hash.state; // optional