2010-11-20 3 views
5

Je veux écouter les changements continus de CouchDB en utilisant jQuery - maintenant cela fonctionne:la lecture du flux continu de CouchDB en utilisant Ajax/jQuery

http://localhost:5984/testdb/_changes?feed=continuous 

ce qui signifie que je reçois une nouvelle ligne de JSON chaque fois qu'il ya un Mise à jour db - mais comment lire les mises à jour de cette URL en utilisant jQuery?

J'ai essayé avec cela, mais il ne fonctionne pas:

$.ajax(
{ 
    url : "http://localhost:5984/testdb/_changes?feed=continuous&callback=?", 
    dataType : 'json', 
    success : function(data) 
    { 
    alert(data.results.length); 
    } 
}); 

Modifier: $ .ajax appelle la fonction « succès » et retourne immédiatement, il n'a pas « sondage » pour les changements .. (colonne de calendrier pour la colonne ajax dans l'image ci-dessous est 16ms)

alt text

Et non, ce n'est pas un problème ajax interdomaine - je peux voir dans Firebug il y a une réponse avec le bon nombre d'éléments

Donc, toute orientation/conseil serait apprécié - il ne doit pas être jQuery - vieux javscript plaine ferait aussi bien

+2

'feed = continuous' est destiné à être utilisé côté serveur. Dans le navigateur, utilisez 'feed = longpoll' –

Répondre

1

Du haut de ma tête, je peux penser à deux bonnes façons de le faire .

  1. l'aide d'une minuterie (ie., setTimeout();), exécutez l'appel AJAX sur les changements alimentent toutes les X secondes. Vous stockez également le dernier numéro de séquence que vous avez reçu, afin que vous puissiez indiquer aux modifications le numéro de séquence à démarrer lors de la prochaine interrogation. Cela permettra d'éviter les doublons et de réduire les réponses. En fonction des navigateurs que vous devez prendre en charge, vous pouvez peut-être utiliser l'API EventSource. Voici une implémentation jQuery: https://github.com/rwldrn/jquery.eventsource

+0

Merci Sam - j'en fais 1. maintenant ... mais je voudrais utiliser la méthode de flux continu - et je ne peux pas utiliser 2, j'ai besoin de supporter autant de navigateurs – sami

+0

Donc, ce n'est généralement pas possible avec HTTP car c'est un protocole sans état. Cependant, jetez un oeil à http://en.wikipedia.org/wiki/Comet_(programming) pour les méthodes de le faire. Ce que vous faites maintenant est l'une de ces méthodes. –

+0

Oui, Comet a raison - merci de l'avoir signalé - au cas où j'arriverais à écrire le code pour gérer ça, je l'afficherai ici – sami

Questions connexes