Zum Inhalt springen

mehr fetch

Die Funktion fetch kann nicht nur für einfache GET Requests eingesetzt werden, sondern bietet noch mehr Möglichkeiten:

Sollen Cookies bei diesem Request mitgeschickt werden?

<script>
let promise = fetch("api.php", {
credentials: 'same-origin'
});
</script>

Beliebige zusätzliche HTTP Header einfügen.

<script>
let promise = fetch("api.php", {
headers: {
"API-Key": "xxxxyyyy",
});
</script>

POST Request mit Daten im JSON Format:

<script>
let promise = fetch("api.php", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
});
</script>

Für die Fehlerbehandlung gibt es die Methode catch:

fetch("counter_ajax.php")
.then(response => response.text())
.then(text => document.getElementById('output').innerHTML = text )
.catch(error => {
document.getElementById('output').innerHTML = '#';
console.log(error);
});

Zur Erinnerung: Bei einem HTTP Response wird ein Statuscode mitgeliefert, der Erfolg oder Fehler anzeigen kann, siehe auch http-status-code.de

Achtung: wenn bei einem fetch der HTTP-Response einen Statuscode für einen Fehler liefert, z.B. 404 oder 500 , dann löst das noch keine Exception aus, die mit catch gefangen werden könnte.

Die Property response.ok zeigt an ob der HTTP Status im postivien Bereich (200-299) war.

Das müsste man selbst behandeln:

button.disabled = true;
fetch("counter_ajax.php")
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
return response.text();
})
.then(text => document.getElementById('output').innerHTML = text )
.catch(error => {
document.getElementById('output').innerHTML = '#';
console.log(error);
})
.finally {
button.disabled = false;
};