Abrufen von Text aus dem Fetch-Response-Objekt

Lesezeit: 2 Minuten

Benutzer-Avatar
Sam

Ich benutze fetch um API-Aufrufe zu machen und alles funktioniert, aber in diesem speziellen Fall stoße ich auf ein Problem, weil die API einfach eine Zeichenfolge zurückgibt – kein Objekt.

Normalerweise gibt die API ein Objekt zurück und ich kann das JSON-Objekt parsen und das bekommen, was ich will, aber in diesem Fall habe ich Probleme, den Text zu finden, den ich von der API im Antwortobjekt bekomme.

So sieht das Antwortobjekt aus.
Geben Sie hier die Bildbeschreibung ein

Ich dachte, ich würde den Text im Körper finden, aber ich kann ihn anscheinend nicht finden. Wo suche ich?

  • Sie können verwenden typeof um den zurückgegebenen Typ zu überprüfen, wenn Objekt dann etwas und wenn Zeichenfolge dann etwas anderes.

    – Mohd Asim Suhail

    30. Januar 2017 um 22:24 Uhr

  • OK, aber wo ist die eigentliche Textantwort im Antwortobjekt? Nach der Typprüfung muss ich noch die Zeichenfolge extrahieren, die ich aus der Antwort erwarte.

    – Sam

    30. Januar 2017 um 22:25 Uhr

  • Verwenden Sie die .text()-Methode, um den Antwortstream zu lesen.

    – DAC84

    30. Januar 2017 um 22:27 Uhr

Benutzer-Avatar
Zach Tuttle

Mit der Abruf-JavaScript-API können Sie Folgendes versuchen:

response.text().then(function (text) {
  // do something with the text response 
});

Werfen Sie auch einen Blick auf die Dokumente auf bringen > Antwort > Body-Interface-Methoden

Benutzer-Avatar
Mawardy

ES6-Syntax:

fetch("URL")
   .then(response => response.text())
   .then((response) => {
       console.log(response)
   })
   .catch(err => console.log(err))

  • Warum gibt es dann zwei Mal?

    –Timo

    3. März 2021 um 19:56 Uhr

  • weil response.text() Promise zurückgibt

    – Poul

    20. April 2021 um 8:38 Uhr

  • Obwohl dies funktioniert, würde ich beim MDN-Muster bleiben (zweite then angekettet response.text() (Quelle).

    – thdoan

    21. Oktober 2021 um 2:56 Uhr

  • @thdoan magst du erklären warum? ist es nicht dasselbe?

    – moeiscool

    31. März um 16:17 Uhr

Benutzer-Avatar
Rosberg Linhares

Sie können dies auf zwei verschiedene Arten tun:

  1. Die erste Option ist die Verwendung von response.text() Methode, aber beachten Sie, dass ab Dezember 2019 seine weltweite Nutzung beträgt nur 36,71 %:

    async function fetchTest() {
        let response = await fetch('https://httpbin.org/encoding/utf8');
        let responseText = await response.text();
    
        document.getElementById('result').innerHTML = responseText;
    }
    
    (async() => {
        await fetchTest();
    })();
    <div id="result"></div>
  2. Die zweite Möglichkeit ist die Verwendung von response.body Eigentum statt, was aber etwas mehr Arbeit erfordert 73,94 % der weltweiten Nutzung:

    async function fetchTest() {
        let response = await fetch('https://httpbin.org/encoding/utf8');
        let responseText = await getTextFromStream(response.body);
        
        document.getElementById('result').innerHTML = responseText;
    }
    
    async function getTextFromStream(readableStream) {
        let reader = readableStream.getReader();
        let utf8Decoder = new TextDecoder();
        let nextChunk;
        
        let resultStr="";
        
        while (!(nextChunk = await reader.read()).done) {
            let partialData = nextChunk.value;
            resultStr += utf8Decoder.decode(partialData);
        }
        
        return resultStr;
    }
    
    (async() => {
        await fetchTest();
    })();
    <div id="result"></div>

  • 93,14 % für response.text() im Januar 2021.

    – Paul Rooney

    5. Januar 2021 um 9:09 Uhr

  • Wann verwenden Sie die zweite Option?

    –Timo

    3. März 2021 um 19:54 Uhr

  • Warum ist die prozentuale Nutzung relevant?

    – simPod

    22. Juli 2021 um 10:03 Uhr

1063200cookie-checkAbrufen von Text aus dem Fetch-Response-Objekt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy