2016-08-01 2 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 맞아요. 승인 HTML 파일을 API에서 응답으로로드하려고합니다. 요청은 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=.... 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 객체의 두 조각을 넣어.

    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 굉장해! 그것은 완전한 의미를 갖습니다! 엄청 고마워 ! 건배^_^ –