Hi Garren, Your Ajax call won't return any data until it has finished/succeeded. This doesn't play well with the changes feed, which keeps the connection open and is streaming data.
Can you use the eventsource protocol instead? (If not, see [1].) This built-in library does a lot of the work for you so you don't have to worry about manually reconnecting, etc. See https://couchdb.readthedocs.org/en/1536-feature_add-docs/changes.html#event-source [1] Older versions of CouchDB don't support eventsource. We had to update our code e.g. to run on Cloudant (they don't yet support this protocol for the changes feed) and came up with a hack solution, which attaches a progress listener to the underlying XMLHttpRequest in the ajax call. This is not ideal for a few reasons, one being that there is no way to clear the incoming buffer even after the changes are consumed. If you are interested here and this is the route you want to go, I can send you the code. Cheers, Mike On Thu, Dec 11, 2014 at 10:27 AM, Garren Smith <[email protected]> wrote: > Hi All, > > I’m having an issue with monitoring the changes feed of a database on > Couchdb 1.6. I’m using jQuery to monitor the changes feed of a database. > I’ve set it to feed type to longpoll and I’ve set a hearbeat of 3 seconds. > I want the request to return after 3 seconds if no changes happened on the > document. This works perfectly via curl using this: > > curl ' > http://127.0.0.1:5984/MY_DB/_changes?feed=longpoll&since=now&heartbeat=3000&include_docs=true' > < > http://127.0.0.1:5984/MY_DB/_changes?feed=longpoll&since=now&heartbeat=3000&include_docs=true > '> > > But if I try and do the exact same via jQuery it never returns. Any ideas > on why it doesn’t and what I’m doing wrong? Here are steps to reproduce > with jQuery: > > Ppen fauxton in browser: http://localhost:5984/_utils/fauxton/ < > http://localhost:5984/_utils/fauxton/> > Open the dev console. > Run this code snippet: > > function longpoll(last_seq) { > var query = $.param({ > since: last_seq || "now", > include_docs: true, > feed: 'longpoll', > heartbeat: 3000 > }); > > console.log('query ' + query); > var promise = $.get('/qa_multi_1/_changes?' + query); > promise.then(function (resp) { > var parsedResp = JSON.parse(resp), > results = parsedResp.results, > last_seq = parsedResp.last_seq; > > console.log('changes', resp, parsedResp); > > longpoll(last_seq); > }); > } > longpoll("now"); > > > Any help greatly appreciated > Garren
