从获取响应对象获取文本

Sam*_*Sam 9 javascript ajax fetch

我正在使用fetchAPI调用,一切正常,但在这个特定的实例中,我遇到了一个问题,因为API只返回一个字符串 - 而不是一个对象.

通常,API返回一个对象,我可以解析JSON对象并得到我想要的东西,但在这种情况下,我无法在响应对象中找到我从API获得的文本.

这是响应对象的样子. 在此输入图像描述

我以为我会在体内发现文字,但我似乎无法找到它.我在哪里看?

Zac*_*tle 25

使用fetch javascript API,您可以尝试:

response.text().then(function (text) {
  // do something with the text response 
});
Run Code Online (Sandbox Code Playgroud)

另外看一下fetch docs:这里


Maw*_*rdy 24

ES6 语法:

     fetch("URL")
        .then(response => response.text())
        .then((response) => {
            console.log(response)
        })
        .catch(err => console.log(err))
Run Code Online (Sandbox Code Playgroud)

  • 那为什么会有两次呢? (2认同)
  • 虽然这可行,但我会坚持使用 MDN 模式(第二个 `then` 链接到 `response.text()` ([来源](https://developer.mozilla.org/en-US/docs/Web/API /响应/文本))。 (2认同)

Ros*_*res 7

您可以通过两种不同的方式执行此操作:

  1. 第一个选项是使用该response.text()方法,但请注意,在 2019 年 12 月,其全球使用率仅为 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();
    })();
    Run Code Online (Sandbox Code Playgroud)
    <div id="result"></div>
    Run Code Online (Sandbox Code Playgroud)

  2. 第二种选择是改用该response.body属性,这需要做更多的工作,但占全局使用率的 73.94%

    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();
    })();
    Run Code Online (Sandbox Code Playgroud)
    <div id="result"></div>
    Run Code Online (Sandbox Code Playgroud)

  • 2021 年 1 月“response.text()”的利用率为 93.14%。 (4认同)
  • 为什么使用百分比相关? (2认同)