2017-09-27 4 views

答えて

0

まあ、AngularはまだJSONPエンドポイントのカスタムコールバック名をサポートしていないので(私の研究をうまくやっていない限り)。

このトリックは、あなたが手動でJSONPをロードし、カスタムコールバックの名前を提供するために、どこかのサービスまたはコンポーネントでカスタム関数を作成することができますバックバニラJS

の古い日からあります。

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を使ってロードされていません。通常のスクリプトタグを使用して読み込まれています –

関連する問題