2010-11-20 2 views
5

Я хочу слушать непрерывные изменения по сравнению с CouchDB с помощью JQuery - теперь это работает:Читайте непрерывную подачу от CouchDB с помощью Ajax/JQuery

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

, что означает, что я получаю новую линию JSON каждый раз, когда есть db update - но как читать обновления с этого URL-адреса с помощью jQuery?

Я попытался использовать это, но он не работает:

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

Редактировать: $ .ajax вызывает функцию «успеха» и сразу же возвращается, это не «опрос» для изменения .. (график колонка для столбца АЯКСА в изображении ниже 16мс)

alt text

И нет, это не проблема Аякса междоменного - я могу видеть в Firebug есть ответ с правильным числом элементов

Поэтому любые указания/советы будут оценены - он не должен быть JQuery - обычный старый javscript будет делать, а

+2

'feed = continu' предназначен для использования на стороне сервера. В браузере используйте 'feed = longpoll' –

ответ

1

Off верхней части моей головы, я могу думать о двух хороших способов сделать это ,

  1. Использование таймера (то есть., setTimeout();), запустить вызов AJAX на изменения кормить каждые Х секунд. Вы также сохраните последний порядковый номер, который вы получили, чтобы вы могли указать фид изменений, какой порядковый номер будет запущен при следующем опросе. Это предотвратит дублирование данных и уменьшит количество ответов.

  2. В зависимости от того, какие браузеры вам нужны для поддержки, вы можете использовать API EventSource. Вот реализация jQuery: https://github.com/rwldrn/jquery.eventsource

+0

Спасибо Сэм - я делаю 1. прямо сейчас ... но я хотел бы использовать метод непрерывной подачи - и я не могу использовать 2, мне нужно поддерживать столько браузеров насколько это возможно – sami

+0

Итак, это, как правило, «невозможно» с HTTP, потому что это протокол без состояния. Тем не менее, посмотрите на http://en.wikipedia.org/wiki/Comet_(programming) для методов его выполнения. То, что вы делаете сейчас, является одним из этих методов. –

+0

Да, комета правильная - спасибо, что указали ее - на случай, если мне удастся написать код для обработки этого вопроса, я отправлю его здесь – sami

Смежные вопросы