2015-01-21 7 views
1

며칠 후 CouchDB를 간단한 백엔드 솔루션으로 사용합니다. 나는 CORS를 포함하여 그것을 가동시켰다. 그러나 jQuery에서 제공하는 메서드로 ajax 호출을 시도 할 때 CouchDB에 의한 응답은 청크 (http 응답 헤더 상태 >> 전송 인코딩 : 청크)로 전달됩니다. jQuery는 청크 인코딩을 지원하지 않기 때문에 문제가됩니다. 여기에 제안 된 것과 같은 추가 확장자 : jquery support Transfer-Encoding:chunked? how). 전송 인코딩을 변경하는 방법이 있습니까? 공식 문서와 WWW에서 검색하면 해결책이 없습니다. 내 목록 생성 방법에서 추가 헤더 필드를 추가하기 만하면 내부 서버 오류가 발생합니다 (다소 명백 함). 누구 jQuery에 대한 스트리밍 확장을 사용하지 않고 일하는 아약스 전화를 얻는 방법 실마리가 있습니까?jQuery ajax()로 청크 분할 인코딩을 사용하는 CouchDB

답변

0

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 
     } 
     }) 
    } 
    }) 
관련 문제