2017-04-27 75 views
2

在服務器目錄中,我有一個json文件列表。我需要將每個json 文件名導入到我的angular 2組件或字符串或其他結構中。Angular 2 - 從http.get獲取json文件名

我嘗試使用此服務將http.get創建到Web服務器。

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

但是當我的組件我叫anutenteservice.getFiles()我得到這個錯誤:在JSON 意外標記<在位置0。 這是我的組件

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

} 

我不明白哪裏是錯誤。我該怎麼辦?

+0

在我看來,像你發送的請求是返回HTML而不是JSON,因爲第一個字符是「<」。請查看Chrome控制檯中的「網絡」選項卡,並查找此http服務發送的請求,並查看響應以確保它是JSON。 –

+0

你在某處使用JSON.parse嗎? – Powkachu

+0

@AhmedMusallam網絡選項卡中的響應類型是text/html,我發送的請求是application/json ..這是問題嗎?我怎樣才能返回一個JSON類型而不是HTML? – ndrn

回答

0

嘗試做這樣的結構:

export class OrderslistComponent { 
    newsList; 
    errorMessage; 

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

    ngOnInit() { 
    }  
} 

並添加Http到服務類。添加到您的服務類:

constructor(private http: Http) { 
} 

更新1:

嘗試改變類型,在這裏:

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

如果你的反應類型不是JSON

+0

我嘗試這個解決方案,但不要改變..也許它取決於html而不是json的響應類型。 – ndrn

+0

@ndrn檢查我的更新,希望它可以解決問題。我認爲響應類型是JSON。 – SrAxi

+0

使用這條指令我有頁面的html代碼,但我要做的是從服務器目錄讀取以獲取存儲在此目錄中的所有json文件的名稱..是否有JavaScript函數可以讀取從這個服務器目錄? – ndrn