2010-03-23 8 views
4

저는 CouchDB를 처음 사용했습니다.아약스를 통해 CouchDB를 호출 할 때 빈 응답 받기

VM에서 실행중인 CouchDB의 인스턴스가 있습니다. 나는 이불을 통해 또는 직접의 브라우저를 통해이 잘 액세스 할 수 있습니다 브라우저에서 해당 URL을 호출

http://192.168.62.128:5984/articles/hot_dog 

적절한 JSON을 반환합니다. 방화범은 HTTP 응답이 200 것을 나에게 보여주고 content-length 오른쪽 크기와

var ajaxUrl = 'http://192.168.62.128:5984/articles/hot_dog'; 
$.getJSON(ajaxUrl, null, function(data) { alert(data); }); 

는 응답 헤더에서 상대 : 나는 아약스를 통해 그 동일한 URL을 호출 할 때, 나는 아무 것도 얻을 수 없습니다. Etag조차도 CouchDB에있는 것과 일치합니다. 그러나 응답 자체는 비어 있습니다.!

URL은 절대적으로 적합합니다. 나는 트리플 체크를했고 직접 복사/붙여 넣기를했다. jQuery 1.4.2 및 CouchDB 0.8을 사용하고 있습니다.

무슨 일 이죠? 당신이 부하() 함수를 찾아 ... JQuery와 다음 필요한 경우

...

답변

2

브라우저가 거부하는 크로스 도메인 AJAX 요청을하려는 것 같습니다. 이 문제를 해결하려면 위와 같은 JSONP를 사용할 수 있지만 GET 요청이 제한됩니다. 레코드를 추가, 수정 또는 삭제할 수 없습니다. 당신이 AJAX는 CouchDB를 통화를 크로스 도메인을하려고하는 경우

,이 라이브러리를 확인하는 것이 좋습니다 :

http://github.com/benvinegar/couchdb-xd

+0

당신은 이것이 도메인 간 문제라는 것을 절대적으로 옳게 생각합니다. 결국 CouchApp라는 라이브러리를 사용하여 모든 코드를 couchdb의 첨부 파일로 래핑 했으므로 크로스 도메인 문제는 더 이상 발생하지 않습니다. 나는 너의 도서관을 너무 들여다 볼 것이다. 지터보다 '더'정확합니다 (그리고 그는 여가를 가지고 있습니다 :-p) 답으로 응답을 표시했습니다. 감사! – swilliams

-2

우선이는 JSON 질문이고, u는 jQuery를 태그했다.

$ ('# selector'). load (ajaxURL); 경고 ($ ('# selector') .html())

+0

당신이 진술 한 것은 잘못되었습니다. 그는'$ .getJSON'을 사용하여 볼 수있는 jQuery를 명확하게 사용합니다. 'load' 또한 그가 원하는 것을위한 틀린 함수입니다. 따라서이 질문은 json이 태그 – jitter

5

다음과 같이 URL에 callback=?을 첨부 해보십시오. 그러면 jQuery가 jsonp 요청을 실행합니다.

var ajaxUrl = 'http://192.168.62.128:5984/articles/hot_dog?callback=?'; 

추가로 수정하지 않으면이 URL이 브라우저에 표시되는 json의 샘플 출력을 추가해야합니다.

+0

으로 누락 된 경우에만 올바르게 태그 지정됩니다.이 기능을 소파 0.10.1로 업그레이드하면이 트릭을 수행하게됩니다. 고맙습니다! 나는 아직도 왜 이런 일이 발생하는지 모르겠다 ... 콜백 없이는 아약스 호출이 작동하지 않는 이유는 무엇입니까? 접미사? – swilliams

+1

당신이 질문에 쓴 것에서는 크로스 도메인 요청 문제가 아니라고 가정합니다 (다른 포트가있는 웹 서버 내부 또는 VM 외부에서 제공됨). 둘 다 도메인 간 요청으로 간주되어 브라우저). 'callback' 물건을 추가하면'jsonp' 요청이됩니다. 기본적으로 이것은 단지 추측이었습니다. CouchDB에 익숙하지 않았기 때문에 크로스 도메인이 적용되지 않는 이유는 일반 json 요청과 함께 작동하지 않습니다. . jsonp 지원은 버전 0.10에서만 제공되므로 "업그레이드"를 언급 했으므로 업그레이 드는 올바른 일이었습니다. – jitter

5

당신이 당신의 HTML 파일과 같은 다른 웹 서버에서 데이터를 얻을하려고으로 당신은 JSONP 쿼리를 할 필요가 온다. 먼저 CouchDB의 최신 버전에서 구성 (.ini) 파일에서 JSONP 쿼리를 활성화해야합니다. (그것은 기본적으로 비활성화되어 CouchDB를 1.0 이후) 섹션에서 [아파치]이는 당신이 당신의 CouchDB를에 JSONP 쿼리를 생성 할 수 있습니다 완료 후

allow_jsonp = 사실

를 추가해야합니다.

jQuery에서 콜백 =? URL에 연결하여 JSONP 쿼리를 트리거합니다.

해피 크로스 Origin 리소스 공유 모두.

+0

jsonp는 왜 cors 문제에 대한 해답입니까? 그것의 좋은 단기 해결책 그러나 좋은 REST 연습을 위해 결코 진짜로 좋은 장기 1 결코. – Justin

+0

Justin과 CORS는 우스꽝 스럽습니다. 하지만 loomi : CouchDB 서버가 jsonp를 '허용'할 수 있습니까? 브라우저가 요청을하기 위해 무엇을 사용하는지 알지 못합니다. jsonp는 단지 GET입니다. 아니면이 옵션을 사용하여 의사 PUT (JSONP가 지원하지 않는 것)을 수행 할 수 있습니까? – Marc

관련 문제