Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подгрузка в форму данных и удаление старых 
:(
    Опции темы
Gold Dragon
Дата 25.6.2011, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



На сайте есть форма отправки вопросов. Вопросы помещаются в базу. Затем эти данные подгружаются на сайт.. В общем типа чата.

На сайте через определённый момент времени происходит запрос данных на сервер и возвращает последние вопросы.

Собственно вопрос, как подгружать последние вопросы и удалять старые чтобы допустим оставалось 15 последних вопросов? И ещё одно условие. Есть механизм удаления вопросов при определённой модерации. И при очередном запросе эти вопросы тоже должны удаляться если они в листинге.

При этом должна быть возможность пролистывать списка вопросов "вверх".

Может кто встречал подобное, могу рассмотреть варианты smile Проект очень нужен, по этому весь рабочий код буду выкладывать.. smile




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
bars80080
Дата 25.6.2011, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 3
Всего: 315



Цитата(Gold Dragon @  25.6.2011,  09:02 Найти цитируемый пост)
как подгружать последние вопросы

это банальнейшая задача ajax. настолько банальная, что в jquery она решается одной функцией
запрос на сервер, сервер формирует необходимый хтмл и возвращает

запрашивать можно с датой последней проверки. то есть при генерации страницы, указать переменную:

Код

var last_time = <?php echo time(); ?>;


и потом цеплять её значение к запросу.
соответственно, сервер отдаёт только те данные, которые имеют дату новее
плюс он ещё должен возвращать новую дату, которая заменит last_time


Цитата(Gold Dragon @  25.6.2011,  09:02 Найти цитируемый пост)
удалять старые чтобы допустим оставалось 15 последних вопросов

просто делаем хтмл, к примеру, список из дивов. 

Код

<div id="news">
<div class="item"> ... </div>
<div class="item"> ... </div>
<div class="item"> ... </div>
...
</div>


подгружаемые данные добавляем в начало, а затем удаляем те, что имеют индекс более 15:

Код

var i = 0;
$('#news .item').each(function() {
    i++;
    if(i > 15) { $(this).remove(); }
});



Цитата(Gold Dragon @  25.6.2011,  09:02 Найти цитируемый пост)
Есть механизм удаления вопросов при определённой модерации. И при очередном запросе эти вопросы тоже должны удаляться если они в листинге.

дополнительно возвращать идентификаторы последних 15, после чего сверять существующих хтмл на наличие этих идентификаторов. если не соответствует - удалить лишние и отправить запрос на догрузку более старых в нужном количестве

Цитата(Gold Dragon @  25.6.2011,  09:02 Найти цитируемый пост)
При этом должна быть возможность пролистывать списка вопросов "вверх".

что сие значит?

Это сообщение отредактировал(а) bars80080 - 25.6.2011, 11:51
PM MAIL WWW   Вверх
Gold Dragon
Дата 25.6.2011, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



bars80080, как общаться с ajax и jquery я знаю smile Наверное не совсем правильно задал вопрос... Ну тогда по ходу беседы... Буду делать код и выкладывать пожелание (расширение функционала) ;)

В общем суть сводиться к тому что нужно будет передавать идентификаторы тех вопросов, которые сейчас у клиента на сервер. На сервере брать такое же количество последних из базы и сравнивать. Возвращать обратно и удалять не нужное и добавлять новое. Но есть много НО.. (ну или я не могу понять как это реализовать.. сейчас на пальцах

Клиент загрузил себе
ID=2
ID=3
ID=4
ID=5
ID=6

В базу добавился новые вопросы
ID=7
ID=8

И был удалён
ID=4

Осуществляется запрос от клиента на сервер
... тут я предполагаю отправить все ID, что-то типа
...ajax.php?id=2-3-4-5-6

На сервере я получаю следующее
GET
ID=2
ID=3
ID=4
ID=5
ID=6

В базе 5 последних
ID=3
ID=5
ID=6
ID=7
ID=8

Получается что у клиента должен удалить
ID=4

И добавится
ID=7
ID=8

А вот как это одновременно сделать не могу понять. Самый простой вариант это перегонять весь контент. Но именно это я и не хочу, по этому и возник такой вопрос.. Т.е. должно всё красиво меняться

Цитата(bars80080 @  25.6.2011,  12:47 Найти цитируемый пост)
что сие значит?
Очень просто.. Есть кнопка "вверх". Жму и загружается предыдущие



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 28.6.2011, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



Чтобы с чего-то начать, я накидал скелет от которого и будем отталкиваться
Дамп базы
Код

CREATE TABLE IF NOT EXISTS `ajax2_question` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` text NOT NULL,
  `name` varchar(30) NOT NULL,
  `data` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;

INSERT INTO `ajax2_question` (`id`, `text`, `name`, `data`) VALUES
(1, 'Текстовое сообщение 1', 'имя 1', '2011-06-28 19:58:13'),
(2, 'Текстовое сообщение 2', 'имя 2', '2011-06-28 19:58:14'),
(3, 'Текстовое сообщение 3', 'имя 3', '2011-06-28 19:58:16'),
(4, 'Текстовое сообщение 4', 'имя 4', '2011-06-28 19:58:17'),
(5, 'Текстовое сообщение 5', 'имя 5', '2011-06-28 19:58:18'),
(6, 'Текстовое сообщение 6', 'имя 6', '2011-06-28 19:58:19'),
(7, 'Текстовое сообщение 7', 'имя 7', '2011-06-28 19:58:20'),
(8, 'Текстовое сообщение 8', 'имя 8', '2011-06-28 19:58:23'),
(9, 'Текстовое сообщение 9', 'имя 9', '2011-06-28 19:58:24'),
(10, 'Текстовое сообщение 10', 'имя 10', '2011-06-28 19:58:25'),
(11, 'Текстовое сообщение 11', 'Имя 11', '2011-06-28 20:37:35');


index.php
Код

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="jquery.js"></script>
</head>
<body>
<div id="div1"><a href="javascript:void(0)">Послать запрос</a></div>
<div id="div2"></div>
<script>
    $(function() {
        ajax2_question();
        $("#div1 a").click(function() {
            ajax2_question();
        });
    });
    function ajax2_question(){
        $.ajax({
            type: "POST",
            url: "ajax.php",
            dataType: "html",
            success: function(data) {
                $("#div2").html(data);
            }
        });
        return false;
    }
</script>
</body>
</html>


ajax.php
Код

<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'qqq';

mysql_connect($host,$user,$pass);
mysql_query("SET NAMES 'utf8'");
mysql_select_db($db);

$result = '';
$sql = "SELECT *
        FROM `ajax2_question`
        WHERE 1
        ORDER BY `data` DESC
        LIMIT 5";
$r = mysql_query($sql);
$a = mysql_num_rows($r);
for($i=0; $i<$a; $i++){
    $row = mysql_fetch_object($r);
    $result .='<div id="qest'.$row->id.'" style="padding:4px;border: #444444 solid 1px; margin: 4px; width:300px;border-radius: 5px;">';
    $result .='Тект: '.$row->text.'<br />';
    $result .='Имя: '.$row->name.'<br />';
    $result .='Дата: '.$row->data;
    $result .='</div>';
}
echo $result;


сейчас всё просто. Загружается страница и получаются 5 записей из таблицы. Дальше подгрузку посадил на Клик для удобства тестирования.

В это варианте не пойдёт.. Теперь нужно заставить отсылать на сервер ID вопросов. Каждый вопрос помещён в DIV с уникальным ID. Как это сделать?

Это сообщение отредактировал(а) Gold Dragon - 28.6.2011, 20:03


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 29.6.2011, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



Что-то я не могу понять как получить все ID в #div2?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
нуп
Дата 29.6.2011, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: 8
Всего: 33



Код

$('#div2 div[id^=qest]').each(function() {
    // do it!! 
});

PM MAIL   Вверх
Gold Dragon
Дата 29.6.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



а как получить то данные?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
нуп
Дата 29.6.2011, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: 8
Всего: 33



Либо парсить html. или в каждом dive все разбить на части и собрать все данные перед запросом
Код

<div id="blabla">
   <div name="text>Text</div>
   <div name="name">Name</div>
   <div name="date>Date</div>
</div>

Или присилать данные в jsone, строить все на клиенте, и для запроса все брать из того же jsona
PM MAIL   Вверх
Gold Dragon
Дата 29.6.2011, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



всего-то нужно пройтись по "детям" DIV2 и получить у них ID. Зачем парсить то?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
нуп
Дата 29.6.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: 8
Всего: 33



Так я вам написал как это сделать, в чем проблема?
PM MAIL   Вверх
Gold Dragon
Дата 29.6.2011, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



тогда я не понял что такое // do it!!
Мне нужно получить строку с перечнем ID и её отправить.. из твоего кода я этого не вижу. Так объяснил значит.. Допысливать не могу так как не знаю


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
нуп
Дата 29.6.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: 8
Всего: 33



Цитата(Gold Dragon @  29.6.2011,  08:11 Найти цитируемый пост)
Что-то я не могу понять как получить все ID в #div2? 



Код

$('#div2 div[id^=qest]').each(function() {
    alert($(this).text());  
    // id = $(this).attr('id');
    
});



Это сообщение отредактировал(а) нуп - 29.6.2011, 11:08
PM MAIL   Вверх
Gold Dragon
Дата 29.6.2011, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: нет
Всего: 71



ВО! теперь всё понятно и работает.. Я написал что-то такое, но у меня не получилось из за ошибки в названии объекта '#div2 div[id^=qest]'

Добавлено через 4 минуты и 46 секунд
сейчас подлатаю код и продолжим smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0758 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.