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
}
})
}
})
几天以来,我一直使用 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
}
})
}
})