Skip to content

Commit

Permalink
Merge r957380 from trunk:
Browse files Browse the repository at this point in the history
make jquery.couch.js changes handling more robust

git-svn-id: https://svn.apache.org/repos/asf/couchdb/branches/0.11.x@957966 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
janl committed Jun 25, 2010
1 parent c19b3ab commit 0e4f31c
Showing 1 changed file with 29 additions and 11 deletions.
40 changes: 29 additions & 11 deletions share/www/script/jquery.couch.js
Expand Up @@ -215,7 +215,9 @@
changes: function(since, options) {
options = options || {};
// set up the promise object within a closure for this handler
var db = this, active = true, listeners = [], promise = {
var timeout = 100, db = this, active = true,
listeners = [],
promise = {
onChange : function(fun) {
listeners.push(fun);
},
Expand All @@ -231,18 +233,24 @@
};
// when there is a change, call any listeners, then check for another change
options.success = function(resp) {
timeout = 100;
if (active) {
var seq = resp.last_seq;
since = resp.last_seq;
triggerListeners(resp);
getChangesSince(seq);
getChangesSince();
};
};
options.error = function() {
if (active) {
setTimeout(getChangesSince, timeout);
timeout = timeout * 2;
}
};
// actually make the changes request
function getChangesSince(seq) {
var opts = {};
$.extend(opts, options, {
function getChangesSince() {
var opts = $.extend({heartbeat : 10 * 1000}, options, {
feed : "longpoll",
since : seq
since : since
});
ajax(
{url: db.uri + "_changes"+encodeOptions(opts)},
Expand All @@ -252,11 +260,12 @@
}
// start the first request
if (since) {
getChangesSince(since);
getChangesSince();
} else {
db.info({
success : function(info) {
getChangesSince(info.update_seq);
since = info.update_seq;
getChangesSince();
}
});
}
Expand Down Expand Up @@ -531,14 +540,23 @@
}
},
complete: function(req) {
var resp = $.httpData(req, "json");
try {
var resp = $.httpData(req, "json");
} catch(e) {
if (options.error) {
options.error(req.status, req, e);
} else {
alert(errorMessage + ": " + e);
}
return;
}
if (options.ajaxStart) {
options.ajaxStart(resp);
}
if (req.status == options.successStatus) {
if (options.success) options.success(resp);
} else if (options.error) {
options.error(req.status, resp.error, resp.reason);
options.error(req.status, resp && resp.error || errorMessage, resp && resp.reason || "no response");
} else {
alert(errorMessage + ": " + resp.reason);
}
Expand Down

0 comments on commit 0e4f31c

Please sign in to comment.