HTML5 SSE получает обновленные записи из базы данных - PullRequest
2 голосов
/ 27 марта 2012

Это мой первый вопрос, поэтому я заранее извинюсь, если он не был правильно составлен.

Мне нужно получить обновленные записи из базы данных и отобразить их пользователю. Моей первой мыслью было использовать AJAX, но после долгих исследований (включая SO) я решил использовать HTML5 SSE (Eventsource).

Я проверил много уроков и советов и получил рабочий код, поэтому мой вопрос к вам:

Это лучший способ сделать это? Я делаю что-то не так? Я открыт для предложений.

Вот код:

Javascript из HTML / Просмотр файла (используя codeigniter btw):

var source = new EventSource('site/update');</p> <pre><code>var lastId = ''; source.onmessage = function (event) { if(event.data != lastId){ var json_object = eval( '(' + event.data + ')'); var list = ''; $.each(json_object, function() { list = list + this.name + ' - ' + this.phone; }); $('#client').html(list); lastId = event.data; } };

Как вы можете видеть, я создал IF только для того, чтобы он не обновлялся, если это не новый контент. В идеале SSE должен был бы просто вернуться, как только у него появилось новое содержимое, но я протестировал с использованием функции оповещения, и он продолжал получать одно и то же содержимое снова и снова, поэтому я добавил IF. PS. У меня есть список для отображения записей внутри DIV, но я не смог опубликовать его, поэтому он продолжал выдавать ошибку форматирования, поэтому я удалил его из сообщения.

Вот код контроллера: </p> <pre><code>public function update() { $this->load->model('site_model'); $clients = $this->site_model->get_all(''); header("Content-Type: text/event-stream\n\n"); echo "data: " . json_encode($clients); }

Контроллер довольно прост и вызывает функцию модели, которая просто запрашивает все записи БД, соответствующие критериям, которые я хочу. Я не буду публиковать модель, так как это всего лишь запрос.

Ну, вот оно. Я с нетерпением жду ваших мнений.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...