2011-06-30 31 views
5

Estoy trabajando en una aplicación PHP simple, usando CouchDB y PHP-on-Couch para acceder a algunas vistas, y está funcionando muy bien. Mi siguiente paso es presentar a Ajax para actualizar la interfaz con datos de la base de datos.Actualización en tiempo real de Ajax de CouchDB

Entiendo que puede usar las notificaciones _changes para detectar cualquier cambio realizado en la base de datos con la suficiente facilidad. Entonces, es una cuestión de index.html monitorear los cambios (a través de un sondeo largo), que llama a loadView.php para actualizar el contenido de la página.

En primer lugar, espero que el anterior es el método correcto de hacer las cosas ...

En segundo lugar, cuando se navega de index.html, la página parece que nunca se cargue por completo (página barra de carga nunca completa). Cuando se realiza un cambio, Firebug muestra los resultados como se esperaba, pero no cualquier cambio posterior. En este momento, la página parece haber detenido la carga infinita.

Hasta el momento, estoy usando jQuery para realizar la llamada 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); 
    }); 
}); 

¿Alguna idea de lo que podría estar sucediendo aquí?

+2

Con respecto a ** En primer lugar **, ¡estás en lo cierto! – JasonSmith

+0

¡Jaja, increíble! ¡Siempre es bueno pasarlo por debajo de la nariz de otra persona que sabe mejor que yo! – crawf

Respuesta

5

Creo que la respuesta es bastante simple.

A longpoll consulta es AJAX, se garantiza que responda solo una vez, como ir a buscar HTML o una imagen. Puede tomar un poco de tiempo responder mientras espera un cambio; o puede responder inmediatamente si ya han ocurrido cambios.

A continuo La consulta es COMET. Nunca "terminará" la respuesta HTTP, mantendrá la conexión abierta para siempre (excepto por errores, bloqueos, etc.). Cada vez que ocurre un cambio, zoom, Couch lo envía a usted.

Por lo tanto, en otras palabras, intente cambiar feed=longpoll por feed=continuous y vea si eso lo resuelve.

Para el fondo, sugiero la Guía definitiva de CouchDB en change notifications y, por supuesto, el excelente servidor único Couchbase changes API documentation.

+1

que tiene perfecto sentido, ¡debería saberlo mejor que eso! – crawf