борьба с просьбой браузера перезаполнить форму
хмм... а что насчёт кукисов?
заполняй форму на основе сохранённых данных для сессии - так будет красиво и просто.
данные о сессии проще передавать в кукисах, чтобы не засорять строку адреса.
а номер странице в GET - ит стандартное отношение к делу, по-моему
PS. Да ты и сам всё знал
я так и делаю. ТАм проблема не данные передать, а заставить браузер не просить перезаполнить форму POST, если человек вернулся на страницу, где она была заполнена.
> номер странице в GET - ит стандартное отношение к делу, по-моему
я тоже так думаю. Но заказчик считает, что будет некрасивый url (там реально будет некрасивый - параметров в форме может быть несколько десятков ближе к сотне).
(самую-самую)
тогда передавай их GET'ом, записывай в сессию (или делай идентификатор запроса в БД делай редирект на первую страницу результата, у которой в строке адреса будут параметрами только идентификатор запроса и номер страницы
> (самую-самую)
именно.
> тогда передавай их GET'ом, записывай в сессию (или делай идентификатор запроса в БД
> делай редирект на первую страницу результата, у которой в строке адреса будут параметрами
> только идентификатор запроса и номер страницы
погоди, это ж, получается, вроде что форму нужно переписывать через GET (или я не так понял?). А это из условий задачи нельзя.
браузер выдаёт неприятные сообщения только когда мы заходим на страницу, в запросе на которую были переданы POST-данные.
так что оставляем форму POST, рещзультат которой - редирект (GET в том абзаце - скорее всего ошибка засыпающего человека )
Как этого добиться, отправляя форму по посту: надо записать данные формы в базу, сгенерировать идентификатор запроса, отправить в браузер в качестве ответа редирект на страницу отображения результатов запроса, передав в этом редиректе сгенерированный идентификатор, и теперь, получив уже гет-запрос от пользователя, достать из базы данные формы, выполнить поиск и показать результаты.
При постраничном выводе данных в урлы номеров страниц просто добавляем сгенерированный идентификатор.
Можно ли с этим как-нибудь прилично бороться (прилично - это, например, не передавать через GET случайное число, чтобы фф думал, что это другая страница)?
А вообще, имхо, бороться с подобными фичами браузеров не правильно. Меня, например, бесят сайты, на которых предприняты меры для того, чтобы большинство пассворд менеджеров не могли пароль сохранить.
Заполнять форму в window.onload?В принципе, вариант, но это тоже какое-то полуанальное решение.
А вообще, имхо, бороться с подобными фичами браузеров не правильноВ данном случае - правильно.
Человек заполнил форму добавления нового треда на странице со списком тредов, нажал "отправить" - данные ушли, страница обновилась - а человек в это время вообще в другое окно смотрел; вернулся, видит - в форме данные остались. Большинство людей в таком случае в список тредов не глядят, свой тред не ищут, а считают, что, например, забыли нажать на кнопку "отправить" - и жмут ещё раз.
правда он как-то слишком длинно выразился, но смысл тот
нажали на кнопочку, которая обновляет страницу через JSне понял
т.е. после нажатия на кнопочку делается вот это? :
1) отправляются данные на сервер (например ajax)
2) window.location.reload
а вообще если window.onload работает (т.е. лисья фича срабатывает ДО него) то можно в window.onload вызывать reset формы
1) отправляются данные на сервер (например ajax)Да.
2) window.location.reload
а вообще если window.onload работает (т.е. лисья фича срабатывает ДО него) то можно в window.onload вызывать reset формыТут уже сказали про это.
Неужели такая говнофича никакими прямыми способами не отключается?
Тут уже сказали про это.где это? до меня никто про ресет не говорил
Неужели такая говнофича никакими прямыми способами не отключается?
что ты называешь прямым способом?
помойму ресет вполне прямой способ
<form autocomplete = "off">
но тогда он задизаблиться полностью, а не как ты хочешь частично
но тогда он задизаблиться полностьюАга, и во всех браузерах
И, кстати, не факт, что это поможет против этой фишки фф.
Текстареа точно не автокомплитится
Доходит до смешного:
<select name="day">
<option value="1">1</option>
...
<option value="26" selected>26</option>
...
<option value="31">31</option>
</select>
Открываем страницу - всё отлично.
Поменяли код чуть-чуть (не самого селекта, а страницы вообще - заголовок сменили, например обновили страницу - выбрано уже не 26, а 1.
Обновляем страницу по CtrlF5 - всё хорошо, выбрано 26.
Насчёт textarea - не уверен, но вроде содержимое textarea тоже сохраняется...
Насчёт textarea - не уверен, но вроде содержимое textarea тоже сохраняется......только при навигации вперёд-назад. Ну или при обновлении.
Что вполне правильно: пишу я сообщение на форуме, решил перед отправкой проверить, не появились ли новые сообщения. Жму F5. Или я должен извращаться: открывать страницу в новой вкладке или вообще, текст в буфере сохранять?
А вот сейчас появилась уже более-менее приличная идея - перед перезагрузкой страницы, опять же, проходим по всем формам и сбрасываем их содержимое - пользователь всё равно этого не увидит, а при обновлении страницы уже всё будет чисто.
Оставить комментарий
tihon972009
Есть форма поиска, составленная через POST.При ее заполнении выдаются результаты, разбитиые на страницы, номера которых передаются через GET (ибо а как еще? поэтому, чтобы между страницами сохранялись данные формы (поскольку пользователь не может одновременно тыкнуть и на номер страницы и на кнопку отправки формы соотв. ключи массива POST передаются через SESSION.
Это о предмете.
Теперь проблема: из-за того, что форма POST, браузер при нажатии на нее кнопки back предлагает каждый раз обновить в ней данные (данные в ней не должны обновляться (т.е. должны выдаваться результаты предварительно заполненной формы; даже при возврате со страниц, не отноящихся к поиску) кроме специальных случаев, явно описанных в коде отдельно) - FF выдает alert с вопросом, IE вообще показывает ужасную белую страницу, короче, пользователю неудобно, что приводит к некоторым потерям пользователей (кот.
1. Можно ли заставить браузер не просить подтверждение на заполнение формы, а выдавать ее сразу заполенной (на основе того, что в SESSION)?
(была идея в нужных случаях сделать редирект, чтобы POST-запрос отправлялся с пустым телом и браузер, соответственно, не просил второй раз заполнить форму, но так получится бесконечный цикл, потому что так сттаница все время перенаправляется сама на себя).
2. Есть ли объективные против использования в данном случае GET?
upd: короче, вопрос коротко формулируется так - как заставить браузер не просить перезаполнить форму POST, если человек вернулся на страницу, где такая форма была заполнена