#jquery #php #javascript #mysql
Всем привет! Заметил такую проблему, которая мешает удобству на сайте. Происходит подгрузка дополнительных сообщений (по 10 штук) в div. Если перейти далее (по ссылке) и после нажать назад (в браузере), то подгруженные сообщения ранее исчезают, не отображаются. Их приходится подгружать заново. На многих сайта (примерно с такой же системой) работает без такой проблемы. Подгрузка осуществляется путем скролла. Скорее всего проблема решается с помощью кеширования, но это всего лишь догадки. Код: javascript: HTML. Выводится 10 первых сообщений путем foreach. После цикла php идет див для подгрузки новых сообщений:Сообщений больше нет.
Ответы
Ответ 1
Используйте хеш. Т.е. на кнопках постранички ставите, к примеру ID, в котором есть номер страницы, а в JS по клику вытаскиваете этот номер страницы и устанавливаете хеш. Например, у вас кнопки постранички имеют класс paginal и ID pn-1, pn-2 и т.д.: $('.paginal').click(function(e){ var arrId = $(this).attr("id").split('-'); var numPage = parseInt(arrId[1], 10); // Номер страницы, можно использовать для чего-то еще location.hash = "pn" + numPage; // Устанавливаем хеш });Ответ 2
Если вы хотите что-бы страницу генерировал сервер - используйте сессии, т.е., например - добавьте в сессию массив вида: $_SESSION[ 'messages' ] = array('article_id' => 0, 'article_id' => 0, ...); Когда тяните сообщения аяксом - делайте инкремент для каждого элемента массива (по id текущей статьи, или что там у вас). Во время генерации html страницы - проверяйте нет ли в сессии числа для текущей статьи, если нету - выводите страницу по умолчанию, если есть - изменяйте соответствующим образом количество сообщений. Т.е. что-то типа: $id = !empty($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0 ? $_GET['id'] : 0; if( $id ) { /* db connection here... */ $step = 10; // количество по умолчанию $limit = !empty($_SESSION[ 'messages' ][ $id ]) ? $_SESSION[ 'message' ][ $id ] * $step : $step; $query = 'SELECT * FROM .... WHERE id=' . (int) $id . ' LIMIT ' . $limit; // ...... } Но тут есть небольшой недостаток - если пользователь закроет браузер, сами понимаете - сессия умирает и, соответственно информация не запоминается. Таким образом если вы хотите что-бы эти данные хранились дольше - проделывайте примерно то-же самое только непосредственно в БД с конкретным пользователем. Но тут недостаток в том что не будет работать для незарегистрированных. По поводу предложения @Deonis - это очень удобно т.к. не требует от вас переписывания серверного кода и решает проблемы гостей и закрытия сессий. Но здесь, все-же, абсолютно разные подходы и в одной задаче будет лучше одно, в иной - другое, соответственно выбирайте то что лучше для решения непосредственно вашей задачи.Ответ 3
Если Вы предполагаете, что пользователь будет несколько раз возвращаться на какую-то страницу, можно сделать так, чтобы при подгрузке в куках сохранялось число, указывающее на то, сколько было подгрузок. Напишите сценарий, который, ориентируясь на число в куках, делал бы определенное количество подгрузок при загрузке страницы.
Комментариев нет:
Отправить комментарий