Во-первых, это, вероятно, приведет к плохой работе с пользователем, если кто-то занят чем-то занятым с таблицей, например, выделяя текст, когда все это внезапно возвращается. Если вы должны перезагрузить все данные, по крайней мере, обновите только измененные строки. Вы можете добиться этого с помощью встроенных манипуляций таблицами javascript или любого числа jQuery plugins.
Во-вторых, если это возможно с точки зрения вычислительной точки зрения, было бы гораздо более эффективно с точки зрения передачи данных и пользовательского опыта, если бы вы могли рассчитать, какие строки изменились, и только отправлять эти строки. Назначьте глобально уникальную id
для каждой строки в вашей таблице, так что вы можете легко обновить только эту строку с помощью jQuery. С помощью этой технологии также легко добавить визуальный сигнал, который обновила конкретная строка, например, небольшое изменение цвета, которое часто бывает приятным (если применимо).
Мой любимый способ делать такого рода вещи (без Comet) заключается в следующем:
- Опрос каждые 10 секунд на страницу, которая только возвращает изменилась ли данные. Проверка этого намного эффективнее, чем отправка всех данных все время. Вам нужно только сохранить поле datetime, содержащее, когда последнее значение изменилось, и проверить его на последнее время, которое получил браузер (отправить его с запросом).
- Если он изменился, используйте jQuery метод
trigger
, чтобы отправить другой запрос ajax, на этот раз ожидая список строк, которые изменились с того времени datetime.
- Обновить поврежденные строки.
Update
на основе ваших комментариев, я просто добавить несколько дополнительных заметок.
- Для опроса вы, вероятно, используете метод jQuery .get(). Вы сказали, что используете Django, поэтому я предлагаю использовать json, что означает, по вашему мнению, вы вернете данные JSON. Вот вам a simple tutorial, чтобы вы начали.
- В функции обратного вызова для успеха проверьте, есть ли новые данные с логическим возвратом из представления Django, а если есть, вызовите функцию, которая заставляет новый вызов ajax извлекать соответствующие данные (опять же, объект JSON).
- С помощью этого объекта JSON просматривайте каждый элемент, который необходимо обновить, и используйте функцию jquery
text
или один из плагинов таблицы jQuery для обновления строк.
Это довольно много и много гуглинга, если вы новичок в этом, но это хороший, чистый способ сделать это.
спасибо. Данные из таблицы будут получены из базы данных. Каждый со своей собственной меткой времени, поэтому я, вероятно, воспользуюсь параметром запроса, в котором пользователь timestamp загрузил страницу, а затем я просто сравню эти временные метки. Однако моя проблема заключается в этом предложении «Опрос каждые 10 секунд на странице, которая возвращает только данные, которые изменились». Понимаете, я знаю, как использовать .load() с jQuery для изменения содержимого элемента div, например. Думаю, мне нужно будет побольше узнать об этом .. – xpanta
отличный ответ, спасибо –
Отличный ответ! В любом месте, где есть более практическое руководство по тому, как это сделать? – Notflip