如何在不使用 JSONP_CALLBACK 的情况下在 Angular2 中发出 jsonp 请求
How to make jsonp request in Angular2 without using JSONP_CALLBACK
我正在尝试向不属于我的网站发出 JSONP 请求。无论我在 callback= 字段中输入什么,它们的回调名称都不会改变。有没有办法在 Angular2 中设置自定义回调名称?
好吧,因为 Angular 还不支持 JSONP 端点的自定义回调名称(除非我没有做好研究)。
这个技巧从过去的 Vanilla 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 后将其删除,以便您可以根据您的场景进行调整。
我正在尝试向不属于我的网站发出 JSONP 请求。无论我在 callback= 字段中输入什么,它们的回调名称都不会改变。有没有办法在 Angular2 中设置自定义回调名称?
好吧,因为 Angular 还不支持 JSONP 端点的自定义回调名称(除非我没有做好研究)。
这个技巧从过去的 Vanilla 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 后将其删除,以便您可以根据您的场景进行调整。