2010-11-20 20 views
5

Quiero escuchar los cambios continuos de CouchDB utilizando jQuery - ahora esto funciona:Leer alimentación continua de CouchDB con Ajax/jQuery

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

lo que significa que tengo una nueva línea de JSON cada vez que hay una Actualización de db, pero ¿cómo leo actualizaciones de esta URL usando jQuery?

He intentado utilizar esto, pero no funciona:

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

Editar: $ .ajax llama a la función "éxito" y vuelve inmediatamente, no lo hace "encuesta" de los cambios .. (columna de línea de tiempo para la columna Ajax en imagen de abajo es de 16ms)

alt text

Y no, no es un problema ajax entre dominios - puedo ver en Firebug hay una respuesta con el número correcto de elementos

Así que cualquier orientación/consejo sería apreciado - no tiene por qué ser jQuery - el viejo y simple javscript haría así

+2

'feed = continuous' está destinado al uso en el lado del servidor. En el navegador, use 'feed = longpoll' –

Respuesta

1

De la parte superior de mi cabeza, no puedo pensar en dos buenas maneras de hacer esto .

  1. El uso de un temporizador (es decir., setTimeout();), ejecute la llamada AJAX en los cambios alimentan cada X segundos. También almacenará el último número de secuencia que recibió, de modo que pueda indicar a los cambios la alimentación del número de secuencia que se iniciará la próxima vez que realice una encuesta. Esto evitará la duplicación de datos y reducirá las respuestas.

  2. Según la cantidad de navegadores que necesite admitir, es posible que pueda utilizar la API de EventSource. Aquí hay una implementación de jQuery: https://github.com/rwldrn/jquery.eventsource

+0

Gracias Sam - Estoy haciendo 1. en este momento ... pero me gustaría usar el método de alimentación continua - y no puedo usar 2, necesito admitir tantos navegadores como sea posible – sami

+0

Por lo tanto, esto generalmente "no es posible" con HTTP porque es un protocolo sin estado. Sin embargo, eche un vistazo a http://en.wikipedia.org/wiki/Comet_(programming) para conocer los métodos para hacerlo. Lo que estás haciendo ahora es uno de esos métodos. –

+0

Sí, Comet está en lo cierto, gracias por señalarlo, en caso de que logre escribir el código para manejarlo, lo publicaré aquí – sami