![]() |
|
Модераторы: Illuminaty |
![]()
|
|
| Forza |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 12.9.2004 Репутация: нет Всего: 2 |
В продолжении темы об использовании REFERER в веб-программировании, т.е. о том, как остаться на той же самой веб-странице после выполнения запроса, по параметрам которого изначально не догадаться, с какой страницы он был отправлен.
Теперь немного другая ситуация: Есть инет-магазин. В нём товары могут выводиться в едином каталоге, в каталогах по категориям, в результатах поиска и т.д. Из всех этих типов страниц товар может быть добавлен в корзину. После нажатия на «добавление в корзину» надо: а) добавить товар в корзину на сервере б) пересчитать корзину в) вывести ту же самую страницу, с которой товар был добавлен, с обновлённой информацией о корзине (кол-во товаров и общая стоимость). Раньше для возвращения на ту же страницу использовал print redirect (referer()). Теперь ищу альтернативу. Вариантов много: а) В урл добавления товара (“choice=add;id=1”) добавить параметр source_query, в который записать текущие параметры запроса (escape (query_string())), а потом после обработки добавления товара делать на него переход, добавив те параметры запроса к основному урлу - print redirect (url().”?”.unescape (param (“source_query”))). Плюс – независимость от JavaScript, минус – полный рефреш страницы, хранение параметра source_query в каждом из 100 урлов добавления товара (увеличение размера страницы на 5-10 кб). б) Использовать единую форму для вывода текущей страницы каталога. В ней будет один хидден, хранящий текущий урл, а каждая кнопка добавления товара в корзину будет сабмитом с определённым именем. Плюс – не надо хранить 100 копий урла, минус – передача данных в урле не в виде “choice=add;id=1”, а в виде “add1.x=1;add1.y=2” (или использование хидденов choice, id и джаваскрипта для приведения урла к виду “choice=add;id=1”). в) Повесить на каждую кнопку «добавления в корзину» JavaScript-обработчик клика, который будет в невидимом фрейме добавлять товар в корзину на сервере (Perl), а потом рефрешить текущую страницу (JS). Плюс - урл текущей странице вообще запоминать не надо. Минус – обязательное использование JavaScript (или его уже никто не отключает в настройках броузеров?). г) Повесить на каждую кнопку «добавления в корзину» JavaScript-обработчик клика, который будет в невидимом фрейме добавлять товар в корзину на сервере, а потом обновлять (через innerHTML) строку с информацией о текущем состоянии корзины. Плюс – не надо рефрешить страницу. Минус – а все ли броузеры поддерживают innerHTML для слоёв или параграфов? Нетскейп, по-моему, не поддерживает. д) Записывать в переменную сессии очередной урл, если он связан с выводом списка товаров (а не, например, добавление или удаление), и делать на него переход, если было получен запрос на добавление товара в корзину. Плюс - нет JavaScript, не надо сохранять текущий урл где-то на странице. Минус - необходимость в рефреше страницы. По-моему, мой вопрос достаточно банальный для современных веб-приложений, и поэтому, наверное, на основе опыта уже должно быть выработана оптимальная реализация этого. С интересом ознакомлюсь с ней и (optional) аргументами в её пользу Это сообщение отредактировал(а) Forza - 26.9.2004, 16:16 |
|||
|
||||
| Zandr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 433 Регистрация: 16.7.2004 Где: Новосибирск Репутация: нет Всего: 13 |
Про реализацию - не ко мне, а вот продолжать использовать Referer не стоит (по крайней мере не возлагать на него особые надежды)... Эта вещь передается браузерами, причем опционально. У меня на сайте первоначально авторизация включала проверку Referer'а. А у работодателя, к которому я приходил на собеседование, его Mozilla этот параметр не возвращала.... В общем не взяли на работу
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Вёрстка веб-сайтов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |