Это мой первый вопрос, поэтому я заранее извинюсь, если он не был правильно составлен.
Мне нужно получить обновленные записи из базы данных и отобразить их пользователю. Моей первой мыслью было использовать 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);
}
Контроллер довольно прост и вызывает функцию модели, которая просто запрашивает все записи БД, соответствующие критериям, которые я хочу. Я не буду публиковать модель, так как это всего лишь запрос.
Ну, вот оно. Я с нетерпением жду ваших мнений.
Спасибо.