Там очень много происходит для того, чтобы сделать этот процесс работы ...
- КЛИЕНТ регулярно опрашивает сервер для новых записей чата
- проверяет сервер для и отвечает только с новейшими
- Клиент получает новейшие записи и добавляет их в DOM
Это может сбивать с толку, когда вы начинаете сначала, потому что не всегда ясно, что делает клиент и что делает сервер, но если большая проблема Я думаю, вы обнаружите, что это простой процесс.
Если клиент собирается регулярно опробовать сервер для новых записей чата, то для сервера (django) должен быть API-интерфейса определенного типа. Самое большое решение - какой тип данных возвращает сервер. Вы можете выбрать: визуализированный HTML, XML, YAML или JSON. Самый легкий вес - JSON, и он поддерживается большинством основных фреймворков javascript (а django включает в себя сериализатор JSON, так как это потрясающе).
# Your model I'm assuming is something to the effect of...
class ChatLine(models.Model):
screenname = model.ChatField(max_length=40)
value = models.CharField(max_length=100)
created = models.DateTimeField(default=datetime.now())
# A url pattern to match our API...
url(r'^api/latest-chat/(?P<seconds_old>\d+)/$',get_latest_chat),
# A view to answer that URL
def get_latest_chat(request, seconds_old):
# Query comments since the past X seconds
chat_since = datetime.datetime.now() - datetime.timedelta(seconds=seconds_old)
chat = Chat.objects.filter(created__gte=comments_since)
# Return serialized data or whatever you're doing with it
return HttpResponse(simplejson.dumps(chat),mimetype='application/json')
Поэтому, когда мы опрашивать наш API, мы должны получить обратно что-то вроде этого ..
[
{
'value':'Hello World',
'created':'2009-12-10 14:56:11',
'screenname':'tstone'
},
{
'value':'And more cool Django-ness',
'created':'2009-12-10 14:58:49',
'screenname':'leethax0r1337'
},
]
На нашей фактической странице, мы имеем <div>
тег, который мы будем называть <div id="chatbox">
, который будет держать все, входящие сообщения чата. Наш javascript просто должен опросить API-интерфейс сервера, который мы создали, проверить, есть ли ответ, а затем, если есть элементы, добавьте их в окно чата.
<!-- I'm assuming you're using jQuery -->
<script type="text/javascript">
LATEST_CHAT_URL = '{% url get_latest_chat 5 %}';
// On page start...
$(function() {
// Start a timer that will call our API at regular intervals
// The 2nd value is the time in milliseconds, so 5000 = 5 seconds
setTimeout(updateChat, 5000)
});
function updateChat() {
$.getJSON(LATEST_CHAT_URL, function(data){
// Enumerate JSON objects
$.each(data.items, function(i,item){
var newChatLine = $('<span class="chat"></span>');
newChatLine.append('<span class="user">' + item.screenname + '</span>');
newChatLine.append('<span class="text">' + item.text + '</span>');
$('#chatbox').append(newChatLine);
});
});
}
</script>
<div id="chatbox">
</div>
Теперь, конечно, я не проверял ничего из этого, но я надеюсь, что дает представление о том, как все идет вместе.
Привет, Даниил! Итак, я просто добавлю() div со значением? Мне нужно обновить div с помощью новых сообщений каждые x секунд. – Harry