2016-08-01 18 views
0

私はSpotify APIに対して簡単な承認リクエストを作成しようとしています。 GET HTTPRequestを作成すると、クロスドメインエラーが発生します。したがって、コールバックを使用してJSONPリクエストを作成していますが、上記のようにMIMEタイプエラーが発生します。回避策は、MIMEタイプに一致するHTTPRequest JSONリクエストを再度作成することです。かなりデッドロックです、私はここにいます!助けてください!おかげ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ここに@JF –

+0

@JFそうですApiからの応答として承認htmlファイルをロードしようとしています。要求はPOSTMAN –

答えて

3

あなたの問題は、HTMLページの何かをロードするために<script>タグを使用していることのようです。

ユーザーが認証する必要
  1. は、それらをリダイレクトします:あなたは、ページの読み込みにリダイレクトするつもりなら、location.replace(...)代わりのlocation.href = ...使用することを

    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 
        ""; 
    

    注これは私の提案のソリューションです。この方法では、ユーザーは、戻るボタンの履歴にすぐにリダイレクトするページを表示しません。

  2. その後、THE_URI_TO_REDIRECT_TO内のURLで、ハッシュを解析:#access_token=...&expiry=...
    Spotifyはこのようなハッシュを作ります。 location.hashは、先頭に#を含むそのハッシュを返します。 &の上

    var h = location.hash.slice(1) 
    

    ...と分割:

    var hash = {}; 
    

    は、その後、我々は#削除:まず、私たちは私たちの選択肢を保持するオブジェクトを設定します。

    h = h.split('&') 
    

    次に、我々はペア(forEach)の全てを反復して(すなわちhash['access_token'] = '...';

    h.forEach(function(pair) { 
        pair = pair.split('='); 
        hash[pair.shift()] = pair.join('='); 
    }); 
    
  3. その後、あなたがデータを読み取ることができhashオブジェクト内の2枚を入れた。

    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は十分にあなたに感謝できませんでした!ちょうど1つのこと、コールバックスクリプト(ポイント2)でそこで何をしたか教えてもらえますか、それとも私が方向性を指すようにして、それについてもっと知ることができますか?私は最近Apisと一緒に働いていて、リダイレクトURIがどのように動作するのか、スクリプトが何をしているのかを明確には考えていません。もう一度ありがとう:D! –

+0

これはハッシュを解析します。編集を参照してください。 –

+0

@J F awesome!それは完全な意味があります!ありがとう、トン! Heers @ _^ –

関連する問題