CouchDB 使用 jQuery ajax() 的分块编码

CouchDB using chunked encoding with jQuery ajax()

几天以来,我一直使用 CouchDB 作为简单的后端解决方案。我搞定了 运行,包括 CORS。但是,当我尝试使用 jQuery 提供的方法进行 ajax 调用时,CouchDB 的响应以块的形式传递(http 响应 header 状态 >> 传输编码:分块)这是一个问题,因为 jQuery 不支持分块编码(没有像这里建议的额外扩展:jquery support Transfer-Encoding:chunked? how)。有没有办法改变传输编码?在官方文档和 WWW 中搜索没有找到解决方案。仅在我的 list-generation 方法中添加一个额外的 header 字段只会导致内部服务器错误(有些明显)。有没有人知道如何在不使用 jQuery 的流扩展的情况下让 ajax 调用工作?

当尝试做类似 GET /{db}/{docid}?open_revs=[list of rev strings] 的事情时,我很确定 CouchDB 唯一可用的响应是 Transfer-Encoding: chunked.

类型的数据流

因此,针对这个特定的转速请求,我使用了这种方法:

fetch(urlOfDoc, { open_revs: JSON.stringify([revId, revID2]) })
  .then(response => {
    const reader = response.body.getReader()
    const decoder = new TextDecoder()
    let text = ''
    return getLine()
    function getLine() {
      return reader.read().then(({value, done}) => {
        if (value) {
          text += decoder.decode(value, {stream: !done})
          return getLine()
        } else {
          // Split on the newline, each fourth line is our JSON, e.g.
          // --4b08b42f8ccb77cba04ddfe410ae8b15
          // Content-Type: application/json
          // [empty line]
          // [our json]
          const lines = text.split('\n')
          const revs = []
          lines.forEach((line, i) => {
            if ((i + 1) % 4 === 0) {
              const jsonRev = JSON.parse(line)
              revs.push(jsonRev)
            }
          })
          return revs
        }
      })
    }
  })