2016-02-02 13 views
16

Sto usando angular2 e typescript.Richiesta http angolare 2 con Access-Control-Allow-Origin impostata su *

Sto tentando di pubblicare nella mia lista di abbonamenti per posta elettronica.

Il mio codice finora:

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; 
     }); 
    } 

Questo è l'errore che ottengo nella mia console:

enter image description here

ottengo questo errore ora: SyntaxError Uncaught: imprevisto Token <

Codice di seguito:

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; 
     }); 
    } 
+0

Penso che questo problema in proprietà del server vedi: http://stackoverflow.com/questions/36825429/angular-2-no-access-control -allow-origin-header-is-present-on-the-request –

+0

Per favore guarda sotto risposta: [Access Control Allow origin] (http://stackoverflow.com/a/42547842/6699781) –

risposta

18

Il Access-Control-Allow-Origin intestazione è qualcosa che dovrebbe essere presente nella risposta, non nella richiesta.

Se il servizio supporta CORS, è necessario restituirlo nelle intestazioni di risposta per consentire la richiesta. Quindi non è un problema della vostra applicazione angolare ma è qualcosa che deve essere gestita a livello di server-side ...

Se avete bisogno di maggiori dettagli, si potrebbe avere uno sguardo a questo link:

Modifica

Sembra che thepoolcover.us10.list-manage.com non supporti CORS ma JSONP. Si potrebbe provare a refactoring il codice come descritto di seguito:

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; 
    }); 
} 

Non dimenticare di specificare JSONP_PROVIDERS quando si chiama la funzione bootstrap.

Vedere questo link per maggiori informazioni:

+0

La chiamata sopra è per posta scimpanzé. Sai perché si lamenta? Avrei pensato che lo scimpanzè di posta sarebbe stato di origine incrociata – AngularM

+0

Sembra che il mail chimp supporti JSONP e non CORS con l'URL che hai usato ... –

+0

Ho aggiornato la mia risposta con un campione di utilizzo per Jsonp in Angular2 ... –

1

Il problema è nel lato server. Devi dire al tuo servizio di accettare richieste GET. Per esempio, in JEE con la primavera è necessario aggiungere solo:

@CrossOrigin 
@RequestMapping(value = "/something", method = RequestMethod.GET)