Vielen Dank! Ich musst mir das einige Male durchlesen, die Funktionsweise wird deutlich aber es erfordert doch einiges umdenken. Ich hab die Vorlage mal zu Ende und eingebaut:
submitAndHandleResponse(event) {
event.preventDefault();
return this.submitForm()
.then(this.handleHttpResponse)
.then(this.handleHttpSuccess, this.handleHttpError)
.then(this.handleJsonSuccess)
.then(this.showMessage.bind(this));
}
submitForm() {
const { action, method } = this.elements.commentForm.cloneNode(false);
const body = new FormData(this.elements.commentForm);
const headers = {
'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
return fetch(action, { method, headers, body });
}
handleHttpResponse(response) {
return response.ok ? Promise.resolve(response) : Promise.reject(response);
}
handleHttpSuccess(response) {
return response.json();
}
handleHttpError(response) {
return {
state: 'error'
};
}
handleJsonSuccess(json) {
return Promise.resolve(json);
}
showMessage(json) {
if (json.message) {
this.elements.messageBox.innerHTML = json.message;
}
this.elements.self.dataset.state = json.state;
}
}
So tut's genau das selbe, wie die Quick&Dirty-Lösung. Dennoch erschliesste sich mir der Mehrwert nicht.
Gruss, heinetz