2017-09-27 3 views

답변

0

음, Angular는 아직 JSONP 엔드 포인트에 대한 사용자 정의 콜백 이름을 지원하지 않기 때문에 (내 연구를 잘하지 않은 한).

다시 옛 날부터이 트릭이있다 바닐라 JS는

당신은 수동으로 JSONP를로드하고 사용자 정의 콜백 이름을 제공하기 위해 어딘가에 서비스 또는 구성 요소에서 사용자 정의 함수를 만들 수 있습니다.

getJSONP(uri, callbackName) { 
    return new Promise(function(resolve, reject) { 

     let id = '_' + Math.round(10000 * Math.random()); 

     window[callbackName] = (data) => { 
      delete window[callbackName]; 
      let ele = document.getElementById(id); 
      ele.parentNode.removeChild(ele); 
      resolve(data); 
     } 

     let src = uri + '&callback=' + callbackName; 

     let script = document.createElement('script'); 
     script.src = src; 
     script.id = id; 
     script.addEventListener('error', reject); 
     document.getElementsByTagName('head')[0].appendChild(script); 
    }) 
    } 

및 구성 요소 또는 서비스에서 호출

this.getJSONP(JSONPUri, 'myCustomCallbackName').then((data) => { 
    console.log(data); 
}) 

기본적으로이 아직도 머리에 스크립트 태그와 콜백 함수를 작성하고 당신이 그것을 적용 할 수 있도록 JSONP를로드 할 때 삭제됩니다 당신의 시나리오.

+0

나는 당신의 코드를 시도하고 완벽하게 작동합니다! 이 코드는 어떻게 작동합니까? 심지어 어떤 http 요청을하는 것을 볼 수 없습니다 ... –

+0

JSONP가 XMLHttpRequest를 사용하여로드되지 않았습니다. 일반 스크립트 태그를 사용하여로드되었습니다. –