2016-05-28 9 views
2

Ich kann nicht herausfinden, warum mein Code Daten endlos anfordert. In meinem Dienst bekomme ich Daten, die ein Array von Objekten sind. Ich möchte alle meine http, map, subscribe im Dienst, weil ich brauche, dass der Dienst das lokale Array enthalten, weil ich das Array im Rest meiner Webseite brauche. Mit dem Entwickler-Tool im Browser wird die Methode get endlos angefordert, bis mein Browser abstürzt.HTTP GET Anforderungen Daten endlos

Bemerkenswert ist, dass die eingehenden Daten keine "file.json", sondern eine einfache URL sind. Im Backend verwende ich den Jackson-Objektmapper, um meine Daten als Array mit Objekten zu senden.

BTW, wenn ich den Code zu Service ändern nur Senden der http.get ('someUrl') und tun Karte und abonnieren in der Komponente, es funktioniert gut. Ich könnte auch etwas Hilfe mit den Lösch-Daten-Methoden verwenden, ich habe es nicht zum Laufen gebracht, als ich es auch modifiziert habe, um das Mapping und das Abonnement in der Komponente zu machen.

Hoffe, Sie können einige offensichtliche Fehler sehen! endlos

die Codes, die Schleife:

MyService:

export class MyService { 

    private dummys: Array<Dummy>; 

    constructor(private http: Http) { 
     this.dummys = new Array<Dummy>(); 
    } 
    getData() { 
     this.http.get('someUrl') 
      .map((res: Response) => res.json()) 
      .subscribe(dummys => this.dummys = dummys); 
     return this.dummys; 
    } 

    saveData(dummy: Dummy) { 

     let body = JSON.stringify(dummy); 
     let headers = new Headers({ 'Content-Type': 'application/json' }); 
     let options = new RequestOptions({ headers: headers }); 

     this.http.get('someUrl', body, options) 
      .map((res: Response) => res.json()) 
      .subscribe(dummy => this.dummys.push(dummy)); 
     return this.dummys; 
    } 

    deleteData() { 

     let index = this.dummys.indexOf(dummy); 

     let body = JSON.stringify(dummy); 
     let headers = new Headers({ 'Content-Type': 'application/json' }); 
     let options = new RequestOptions({ headers: headers }); 

     this.http.post('someUrl', body, options) 
      .map((res: Response) => res.json()) 
      .subscribe(dummy => this.dummys = this.dummys.splice(index, 1); 
     return this.dummys; 
    } 
} 

MyComponent:

export class MyComponent { 

    name: string; 
    id: string; 
    date: string; 
    dummys: Array<Dummy>; 

    constructor(public _myService: MyService, public _router: Router) { } 

    getDatas() { 
     this._myService.getData() 
    } 

    saveDatas() { 
     let dummy = new Dummy(this.id, this.name, this.date) 
     this._myService.saveData(dummy) 
     this.name = ''; 
     this._myService.getData(); 
    } 

    deleteDatas(dummy) { 
     this._myService.deleteData(dummy); 
     this._myService.getData(); 
    } 

} 

Meine Vorlage in MyComponent:

<form (submit)="saveDatas()"> 
    <input required [(ngModel)]="name" placeholder="Add data"> 
</form> 
<br> 
<table> 
    <tr *ngFor="let data of getDatas()"> 
    <td>{{data.name}}</td> 
    <td> {{data.date}} </td> 
    <td><button (click)="removeDatas(data)">Remove</button></td> 
    </tr> 
</table> 
+0

Was ist der Antwortcode die HTTP-Anforderung zurückkehrt? Es könnte eine Antwort zurückleiten (302) sein. –

+0

Eigentlich überhaupt kein Code, wenn ich auf die Netzwerkaktivität schaue, zeigt es keinerlei Status ... nur das getmethod eine Million mal .... und dann stürzt es ab ... – Alex

Antwort

1

Abonnieren Sie den beobachtbaren in MyComponent und gibt einen beobachtbaren in Ihren Diensten:

export class MyService { 

... 

getData() { 
    return this.http.get('someUrl') 
     .map((res: Response) => res.json()) 
} 

... 
} 

export class MyComponent { 

... 

ngOnInit() { 
    this.getDatas(); 
} 

getDatas() { 
    this._myService.getData().subscribe(
     response => { this.datas = response}); 
} 
... 
} 

Und in der Vorlage:

<tr *ngFor="let data of datas"> 
+0

Ja, nun, das funktioniert. Aber heißt das nicht, dass die Dummy-Daten im lokalen "Dummies" -Array in der Komponente "gespeichert" werden. Weil ich brauche, dass es im lokalen dummys-Array im Dienst ist. Da ich über eine Funktion verfüge, bei der der Benutzer auf die "Dummy" in der Komponente klickt, wird der Benutzer zu einer anderen Seite navigiert und diese Methode ist im Dienst. So, jetzt bekomme ich den Fehler "kann nicht lesen Eigenschaft .... von Null", was darauf hinweist, dass das lokale Array im Dienst ist Null, nehme ich an. Sorry, wenn ich dumm bin, aber ich bin völlig neu in http;) – Alex

+0

Sie haben Zugriff auf myService-Attribute in MyComponent. Fügen Sie die Werte dort hinzu. – muetzerich

+0

Okay, ich bin mir nicht sicher, was du meinst. Ich meine, ich habe versucht, die Werte im Service-Array hinzuzufügen und den aktuellen Inhalt des Arrays vor und zurück an die Komponente zurückgeben. Was zu meiner ursprünglichen Frage führt: Die Get-Anfrage wird so lange wiederholt, bis der Browser abstürzt ... – Alex

Verwandte Themen