Angular2とTypeScriptを使用しています。
メールチンパンジーサブスクリプションリストに投稿しようとしています。
これまでの私のコード:
constructor(router: Router, http: Http){
this.router = router;
this.http = http;
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
this.headers.append('Access-Control-Allow-Origin', '*');
}
subscribe = () => {
var url = "https://thepoolcover.us10.list-manage.com/subscribe/post?u=b0c935d6f51c1f7aaf1edd8ff&id=9d740459d3&subscribe=Subscribe&EMAIL=" + this.email;
this.isSuccess = false;
this.http.request(url, this.headers).subscribe(response => {
console.log(response);
this.isSuccess = true;
});
}
これはコンソールに表示されるエラーです。
今、このエラーが表示されます:Uncaught SyntaxError:Unexpected token <
以下の現在のコード:
export class Footer{
email: string = "";
router : Router;
http : Http;
jsonp: Jsonp;
isSuccess: boolean = false;
constructor(router: Router, jsonp: Jsonp, http: Http){
this.router = router;
this.http = http;
this.jsonp = jsonp;
}
subscribe = () => {
var url = "https://thepoolcover.us10.list-manage.com/subscribe/post?u=b0c935d6f51c1f7aaf1edd8ff&id=9d740459d3&subscribe=Subscribe&EMAIL=" + this.email;
this.isSuccess = false;
this.jsonp.request(url).subscribe(response => {
console.log(response);
this.isSuccess = true;
});
}
Access-Control-Allow-Origin
ヘッダーは、リクエストではなく、レスポンスに存在すべきものです。
サービスがCORSをサポートしている場合、要求を許可するには、応答ヘッダーでそれを返す必要があります。だから、あなたのAngularアプリケーションの問題ではありませんが、サーバーサイドレベルで処理しなければならないものです...
詳細が必要な場合は、次のリンクをご覧ください。
編集
thepoolcover.us10.list-manage.com
はCORSではなくJSONPをサポートしているようです。以下で説明するように、コードをリファクタリングすることができます。
constructor(private router: Router, private jsonp: Jsonp){
}
subscribe = () => {
var url = "https://thepoolcover.us10.list-manage.com/subscribe/post?u=b0c935d6f51c1f7aaf1edd8ff&id=9d740459d3&subscribe=Subscribe&EMAIL=" + this.email;
this.isSuccess = false;
this.jsonp.request(url, this.headers).subscribe(response => {
console.log(response);
this.isSuccess = true;
});
}
bootstrap
関数を呼び出すときにJSONP_PROVIDERS
を指定することを忘れないでください。
詳細については、次のリンクを参照してください。
問題はサーバー側にあります。 GETリクエストを受け入れるようにサービスに指示する必要があります。たとえば、Springを使用するJEEでは、以下を追加するだけです。
@CrossOrigin
@RequestMapping(value = "/something", method = RequestMethod.GET)