Start · Sprachen · JavaScript · Referenz · Response.ok

Response.ok

Eigenschaft

Schreibgeschützter Boolean, der angibt, ob der HTTP-Statuscode einer <code>Response</code> im Erfolgsbereich 200–299 liegt.

seit JavaScript Baseline: alle modernen Browser (seit 2017), Node. Kategorie: webapi

Signatur

Response.ok

Beschreibung

Die schreibgeschützte Eigenschaft ok des Response-Interfaces ist true, wenn response.status zwischen 200 und 299 (einschließlich) liegt, andernfalls false. Sie ist eine bequeme Kurzform für response.status >= 200 && response.status <= 299.

Das ist wichtig, weil fetch() nicht bei HTTP-Fehlerstatus wie 404 oder 500 abgelehnt wird. Das Promise wird nur bei Netzwerkfehlern, CORS-Verletzungen oder einem Abbruch per AbortSignal abgelehnt. Deshalb solltest du response.ok nach jedem fetch() prüfen, bevor du den Body mit json(), text() o. Ä. weiterverarbeitest.

Typisches Muster: Ist ok gleich false, wird ein eigener Fehler geworfen (gern mit status und statusText), damit Fehler zentral in einem try…catch behandelt werden können.

Rückgabewert

Typ
boolean
Beschreibung
true bei einem Statuscode von 200–299, sonst false (auch bei 3xx, 4xx, 5xx und bei opaken Antworten mit Status 0).

Beispiele

Einfache Prüfung nach fetch()

const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
console.log(response.status, response.ok);

const missing = await fetch('https://jsonplaceholder.typicode.com/todos/999999');
console.log(missing.status, missing.ok);
200 true 404 false

Wiederverwendbare Hilfsfunktion mit Fehlerbehandlung

const fetchJson = async (url, options = {}) => {
  const response = await fetch(url, options);
  if (!response.ok) {
    // Fehlertext des Servers mitnehmen, falls vorhanden
    const body = await response.text().catch(() => '');
    throw new Error(`HTTP ${response.status} ${response.statusText}: ${body}`);
  }
  return response.json();
};

try {
  const user = await fetchJson('https://jsonplaceholder.typicode.com/users/1');
  console.log(user.name);
} catch (err) {
  console.error('Laden fehlgeschlagen:', err.message);
}
Leanne Graham

Response-Objekte selbst erzeugen (z. B. in Tests oder Service Workern)

const created = new Response('{}', { status: 201 });
const notModified = new Response(null, { status: 304 });
const serverError = new Response('Fehler', { status: 500 });

console.log(created.ok, notModified.ok, serverError.ok);
true false false

Netzwerkfehler vs. HTTP-Fehler unterscheiden

const loadConfig = async () => {
  let response;
  try {
    response = await fetch('/api/config');
  } catch (err) {
    // Nur hier landen echte Netzwerk-/CORS-Fehler
    return { error: 'Netzwerkfehler', detail: err.message };
  }
  if (!response.ok) {
    return { error: 'Serverfehler', status: response.status };
  }
  return { data: await response.json() };
};

loadConfig().then(console.log);
{ error: 'Serverfehler', status: 404 } // falls /api/config nicht existiert

// Wichtig · Fallstricke

  • fetch() lehnt bei 4xx/5xx nicht ab: Ohne Prüfung von ok wird z. B. eine HTML-Fehlerseite an response.json() übergeben, was dann mit einem verwirrenden SyntaxError scheitert.
  • Weiterleitungen: fetch() folgt Weiterleitungen standardmäßig (redirect: 'follow'); ok bezieht sich dann auf die finale Antwort. Mit redirect: 'manual' erhältst du eine opaqueredirect-Antwort mit Status 0 und ok === false.
  • Opake Antworten: Bei mode: 'no-cors' ist response.type === 'opaque', status ist 0 und ok immer false – auch wenn der Server eigentlich erfolgreich geantwortet hat.
  • 304 Not Modified und andere 3xx-Codes gelten als nicht ok.
  • Die Eigenschaft ist schreibgeschützt; Zuweisungen werden ignoriert (im Strict Mode TypeError).
  • Kompatibilität: in allen modernen Browsern verfügbar, in Node.js ab Version 18 global (vorher über node-fetch). Nicht im Internet Explorer.