Ich versuche, eine PUT-Anfrage von Angular2 (mit Typoskript) zu einer API mit Laravel. Ich mache es mit der FormData-Klasse, weil ich so eine Datei an die Anfrage anhängen kann. Die POST-Methode funktioniert gut, aber wenn ich versuche, mein Modell mit einer PUT-Methode zu aktualisieren, erhält die API eine leere Anfrage.Angular2 http Put-Methode nicht senden FormData
Ich habe einige Debugging gemacht und die FormData enthält die Daten wie erwartet, so dass ich fast sicher bin, dass meine Daten bei der PUT-Anfrage verloren gehen.
Service:
import {Http, Headers, Response, RequestOptions} from "@angular/http";
@Injectable()
export class SensorService {
public data: Data[] = [];
public sensors: Sensor[] = [];
constructor(private http: Http,
private authService: AuthService) {
}
updateSensor(id: number, nombreNevera: string, ciudad: string, empresa_id: number,
tipoSensor: string, telefonoMarcado: number,
telefonoMarcadoB: number = null, telefonoMarcadoC: number = null,
telefonoMarcadoD: number = null, fechaCalibracion: number = null,
temMax: number = null, temMin: number = null, humeMax: number = null,
humeMin: number = null, correos: any = null, fileToUpload: any = null) {
let formData: FormData = new FormData();
formData.append('nombreNevera', nombreNevera);
formData.append('cuidad', ciudad);
formData.append('empresa_id', empresa_id);
formData.append('tipoSensor', tipoSensor);
formData.append('telefonoMarcado', telefonoMarcado);
formData.append('telefonoMarcadoB', telefonoMarcadoB);
formData.append('telefonoMarcadoC', telefonoMarcadoC);
formData.append('telefonoMarcadoD', telefonoMarcadoD);
formData.append('fechaCalibracion', fechaCalibracion);
formData.append('humeMax', humeMax);
formData.append('humeMax', humeMin);
formData.append('temMin', temMin);
formData.append('temMax', temMax);
formData.append('correos', JSON.stringify(correos));
if (fileToUpload != null) {
formData.append('certificado', fileToUpload, fileToUpload.name);
}
const headers = new Headers({
'X-Requested-With': 'XMLHttpRequest'
});
return this.http.put(APPCONSTANTS.API_ENDPOINT + 'user/sensor/edit/' + id + '?token=' + this.authService.getToken(),
formData,
{headers: headers})
.map((response: Response) => {
return {
msg: response.json().msg
};
});
}
}
Laravel gibt einen "Unprocessable Entity" wegen der erforderlichen Felder in der Steuerung.
Sie müssen einen 'Content-Type'-Header verwenden, und zwar nur dann, wenn Laravel diesen Typ von Put verarbeiten kann. –
Sie werden wahrscheinlich auch einen 'Accept'-Header benötigen, um dem Server mitzuteilen, dass Sie ein Json-Ergebnis wünschen. Wir fanden, dass Firefox ein Problem hatte, wenn wir diesen Header nicht hatten. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept (Obwohl dies nicht das aktuelle Problem ist. Versuchen Sie, was @ Z.Bagley dafür vorgeschlagen.) – ps2goat