2011-06-30 6 views
5

Je travaille sur une application PHP simple, en utilisant CouchDB et PHP-on-Couch pour accéder à certaines vues, et ça fonctionne très bien. Ma prochaine étape est de présenter Ajax pour mettre à jour le frontend avec des données de la base de données.CouchDB Ajax Push mise à jour en temps réel

Je comprends que vous pouvez utiliser les notifications _changes pour détecter facilement toute modification apportée à la base de données. Donc, c'est une question de surveillance index.html pour les changements (via une longue interrogation), qui appelle loadView.php pour mettre à jour le contenu de la page.

Tout d'abord, je l'espère ce qui précède est la bonne méthode d'aller à son sujet ...

En second lieu, lorsque vous naviguez sur index.html, la page semble ne jamais charger complètement (page barre de charge ne complète). Quand une modification est faite, Firebug affiche les résultats comme prévu, mais pas les changements suivants. A ce moment, la page semble avoir arrêté le chargement infini.

Jusqu'à présent, j'utilise jQuery pour faire l'appel Ajax ...

$.getJSON('http://localhost:5984/db?callback=?', function(db) { 
    console.log(db.update_seq); 
    $.getJSON('http://localhost:5984/db/_changes?since='+db.update_seq+'&feed=continuous&callback=?', function(changes) { 
     console.log(changes); 
    }); 
}); 

Toutes les idées ce qui pourrait arriver ici?

+2

En ce qui concerne ** Tout d'abord **, vous avez raison! – JasonSmith

+0

Haha, génial! Toujours bon de le passer sous le nez de quelqu'un d'autre qui sait mieux que moi! – crawf

Répondre

5

Je crois que la réponse est assez simple.

Un longpoll requête est AJAX, garanti pour répondre une seule fois, comme l'extraction HTML ou une image. Il peut prendre un peu de temps pour répondre pendant qu'il attend un changement; ou il peut répondre immédiatement si des changements ont déjà eu lieu.

Une continue requête est COMET. Il ne "terminera" jamais la réponse HTTP, il gardera la connexion ouverte pour toujours (sauf pour les erreurs, les plantages, etc.). Chaque fois qu'un changement se produit, zoom, Couch vous l'envoie. En d'autres termes, essayez de changer feed=longpoll en feed=continuous et de voir si cela résout. Pour l'arrière-plan, je suggère le guide définitif de CouchDB sur change notifications et bien sûr l'excellent serveur simple de Couchbase changes API documentation.

+1

qui est parfaitement logique, je devrais savoir mieux que ça! – crawf

Questions connexes