2016-12-27 4 views
3

Ich lerne Angular2 und jetzt versuche ich meine Daten von einem Rest Service zu bekommen. Mein Ruhe-Service funktioniert und ich kann Daten von dort bekommen.Angular2 REST API

Aber Winkel immer gebe meine diese Fehlermeldung: JSON.parse: unerwartetes Zeichen in Zeile 1, Spalte 1 der JSON-Daten

Das ist mein Service:

import { Injectable }  from '@angular/core'; 
import { Http, Response, Headers, RequestOptions } from '@angular/http'; 

import { Person } from '../_models/person'; 
import { Observable }  from 'rxjs/Observable'; 

@Injectable() 
export class PersonService { 
    private headers: Headers; 

    constructor(private http: Http) 
    { 
     this.headers = new Headers(); 
     this.headers.append('Content-Type', 'application/json'); 
     this.headers.append('Accept', 'application/json'); 
    } 

    getPersons(): Observable<Person[]> { 
     return this.http.get('http://localhost:54612/api/Person') 
      .map(this.extractData) 
      .catch(this.handleError); 
    } 

    private extractData(res: Response) { 
     let body = res.json(); 
     return body.data || {}; 
    } 

    private handleError(error: Response | any) { 
     // In a real world app, we might use a remote logging infrastructure 
     let errMsg: string; 
     if (error instanceof Response) { 
      const body = error.json() || ''; 
      const err = body.error || JSON.stringify(body); 
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
     } else { 
      errMsg = error.message ? error.message : error.toString(); 
     } 
     console.error(errMsg); 
     return Observable.throw(errMsg); 
    } 
} 

Dies ist die Komponente für die Ausblick:

import { Component, OnInit } from '@angular/core'; 
import { Person } from '../_models/person'; 
import { PersonService } from '../_services/person.service'; 


@Component({ 
    moduleId: module.id, 
    templateUrl: 'login.component.html', 
    providers: [ PersonService ] 
}) 

export class LoginComponent implements OnInit { 
    errorMessage: string; 
    personen: Person[] = []; 

    constructor(private personService: PersonService) { } 

    ngOnInit() { this.getPersons(); } 

    getPersons() { 
     this.personService.getPersons() 
      .subscribe(
      personen => this.personen = personen, 
      error => this.errorMessage = <any>error); 
    } 
} 

Und das ist meine Ansicht:

<h1>Tour of Heroes</h1> 
<h3>Heroes:</h3> 
<ul> 
    <li *ngFor="let person of personen">{{person.IDPerson}}</li> 
</ul> 
<p class="error" *ngIf="errorMessage">{{errorMessage}}</p> 
+0

Haben Sie versucht, die zurück json/analysiert json Anmeldung zu sehen, was die Daten aussieht? Vielleicht ist das Problem mit Ihrem API läuft auf 'localhost: 54612' – Samuel

+0

Ich habe dies von der API: 0001-01-01T00: 00 : 00 0001-01-01T00: 00: 00. Ist es das was du meinst? – Ryter

+1

Dies ist kein JSON. json beginnt mit '{' und hat Schlüsselwerte wie "key": "value" 'dann endet es mit'} 'Ich denke, das ist der Grund, warum du den json nicht parsen kannst. – Samuel

Antwort

3

Ihr Server ist Return-XML. Der Grund ist wahrscheinlich, dass es der Standardwert ist, wenn Sie Accept nicht explizit auf etwas anderes setzen. Sie haben es in Headers zu JSON festgelegt, aber Sie fügen der Anforderung die Header nie hinzu. Sie müssen

this.http.get('http://localhost:54612/api/Person', { headers: this.headers }); 
+0

Vielen Dank, Sie haben Recht. Ich musste nur meine Header setzen. Was für ein Facepalm: D – Ryter

1

Versuchen Sie, diese Schnipsel, in Ihrem getPersons tun()

return this.http.get('http://localhost:54612/api/Person',{headers: this.headers }) 
     .map((response:Response) => response.json())