2017-04-27 3 views
2

In einem Server-Verzeichnis habe ich eine Liste von JSON-Dateien. Ich muss jeden Json Dateiname in meine eckige 2-Komponente in einem Array von String oder anderen Struktur importieren.Angular 2 - Get JSON-Dateinamen von http.get

Ich habe versucht, ein http.get mit diesem Service zum Webserver zu machen.

export class AnUtenteService { 
    getFiles() : Observable<string[]> { 
     return this.http.get(directory) 
     .map(this.extractData) 
     .catch(this.handleError); 
    } 

    private extractData(res: Response) { 
     let body = res.json(); 
     return body.data || { }; 
    } 
    private handleError (error: any) { 
    let errMsg = (error.message) ? error.message : 
    error.status ? `${error.status} - ${error.statusText}` : 'Server error'; 
    console.error(errMsg); // log to console instead 
    return Observable.throw(errMsg); 
    } 
} 

Aber wenn in meiner Komponente Ich nenne anutenteservice.getFiles() ich diesen Fehler: unerwartetes Token < in JSON an Position 0. Dies ist meine Komponente

export class OrderslistComponent{ 
    newsList; 
    errorMessage; 
    constructor(private anutenteservice: AnUtenteService, private http: Http) 
    {} 
    ngOnInit() { 
    this.anutenteservice.getFiles() 
    .subscribe(data => this.newsList = data, 
       error => this.errorMessage = <any>error); 
    } 

} 

Ich verstehe nicht, wo der Fehler ist. Was soll ich machen?

+0

Sieht so aus, als ob die Anfrage, die Sie senden, HTML nicht JSON zurückgibt, da das erste Zeichen "<" ist. Sehen Sie sich die Registerkarte "Netzwerk" in der Chrome-Konsole an und finden Sie die Anfrage, die dieser http-Dienst sendet, und sehen Sie sich die Antwort an, um sicherzustellen, dass es JSON ist. –

+0

Verwenden Sie JSON.parse irgendwo? – Powkachu

+0

@AhmedMuslamam der Antworttyp in Netzwerk Registerkarte ist Text/HTML und die Anfrage, die ich sende ist Anwendung/JSON .. Ist das das Problem? Wie kann ich einen JSON-Typ anstelle von HTML zurückgeben? – ndrn

Antwort

0

Versuchen Sie, diese Struktur zu tun:

export class OrderslistComponent { 
    newsList; 
    errorMessage; 

    constructor(private anutenteservice: AnUtenteService) { 
     this.anutenteservice.getFiles.subscribe((data) => { 
       this.newsList = data; 
      } 
     ); 
    } 

    ngOnInit() { 
    }  
} 

Und Http zu Ihrem Service-Klasse hinzufügen. Fügen Sie diese auf Ihre Serviceklasse:

constructor(private http: Http) { 
} 

Update 1:

Versuchen Sie, die Art zu ändern, hier:

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

Wenn Ihr Antworttyp ist kein JSON.

+0

Ich versuche diese Lösung aber nicht ändern .. vielleicht hängt es von der Art der Antwort, die HTML anstelle von JSON ist .. – ndrn

+0

@ndnn Überprüfen Sie mein Update, hoffe es behebt das Problem. Ich dachte, Antworttyp war JSON. – SrAxi

+0

Mit dieser Anweisung habe ich den HTML-Code der Seite, aber was ich tun muss, ist aus dem Server-Verzeichnis zu lesen, um die Namen aller JSON-Dateien zu erhalten, die in diesem Verzeichnis gespeichert sind .. gibt es eine Javascript-Funktion, die zu lesen von diesem Serververzeichnis? – ndrn