2016-08-01 55 views
0

我試圖對Spotify Api進行簡單的獲取授權請求。如果我做了一個GET HTTPRequest然後我得到一個跨域錯誤。因此,我使用回調製作了JSONP請求,但是這導致了上面顯示的MIME類型錯誤,我找到的解決方法是再次發出HTTPRequest JSON請求以匹配MIME類型。我在這裏有一個僵局!請幫忙!由於javascript:MIME類型('text/html')不可執行,並且嚴格的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); 
} 
+0

@JF here you go @JF –

+0

@JF這就對了我是試圖加載一個授權html文件作爲Api的響應。請求在POSTMAN上正常工作 –

回答

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) 
    

    ...和分裂的&秒。

    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 
    
+0

@J F不能夠感謝你!只有一件事,你能告訴我你在回調腳本中做了什麼(點2),或者可以指向一個方向,以便我可以瞭解更多信息。我最近一直在和Apis一起工作,還沒有清楚地知道重定向uri的工作原理或腳本的作用。再次感謝:D! –

+0

解析散列。請參閱編輯。 –

+0

@J F真棒!這是完全合理的!萬分感謝 !乾杯@ _^ –

相關問題