0
自分が所有していないWebサイトにJSONPリクエストを作成しようとしています。彼らのコールバック名は、私がコールバック=フィールドに入れたものに関係なく変更されません。 Angular2でカスタムコールバック名を設定する方法はありますか?JSONP_CALLBACKを使わずにAngular2でjsonpリクエストを作成する方法
自分が所有していないWebサイトにJSONPリクエストを作成しようとしています。彼らのコールバック名は、私がコールバック=フィールドに入れたものに関係なく変更されません。 Angular2でカスタムコールバック名を設定する方法はありますか?JSONP_CALLBACKを使わずにAngular2でjsonpリクエストを作成する方法
まあ、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をロード行われたときにそれを削除しますあなたのシナリオ
私はあなたのコードを試して、それは完全に動作します!このコードはどのように機能しますか?私はあなたがどんなHTTPリクエストをしているのを見ていません... –
JSONPはXMLHttpRequestを使ってロードされていません。通常のスクリプトタグを使用して読み込まれています –