| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > редирект после отправки формы |
| Автор: fridy 15.1.2006, 16:03 |
| Ситуация такая: Форма отправляется скрипту который записывает данные в файл. Сам этот скрипт ничего в браузер не выдает и смотреть на пустой экран вряд ли кому то будет интересно. Значит нужно сделать редирект обратно на страницу с формой и по идее ещё перезагрузить эту страницу чтобы добавленная запись сразу была видна. Но сейчас вопрос о редиректе. Наверное эта тема уже обсуждалась, но я нашел только это http://forum.vingrad.ru/index.php?showtopic=74732 Вариант который там предложен у меня не работает, поскольку не установлен модуль CGI(вообще уменя Денвер) |
| Автор: BlackLFL 15.1.2006, 22:56 | ||
| Для даначала, модуль CGI идет в стандартной поставке Perl, и в Денвере он тоже есть. Далее, тут Perl в обще не причем, используйте специальный HTML тэг
|
| Автор: korob2001 16.1.2006, 16:07 | ||||
\n\n в конце обязательны, ну и разумеется http://yandex.ru, меняй на свой адрес.
Так установи к своему денверу, нормальный дистрибутив с ActiveState. 1.) Жмёшь http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.7.815-MSWin32-x86-211909.msi и качаешь последнюю версию Perl под винду. 2.) Если твой денвер установлен на диске Z:/, то при установке Perl указываешь каталог Z:/usr/, далее на все вопросы жмёшь Yes, Да, Угу и тому подобное. После того, как сделаешь всё это у тебя будет всё тот же Денвер, но только с полноценной, последней версией Perl. |
| Автор: sugee 17.1.2006, 13:11 |
| У меня сработало то что предложил BlackLFL korob2001, строка use strict; у мнея выдает ошибку, то есть опять таки этот модуль не установлен. Интересно узнать что это за модуль и для чего он? |
| Автор: korob2001 17.1.2006, 14:03 | ||||
Это не модуль, а директива компилятора, т.е. прагма. Она заставляет Perl ужесточить правила. Другими словами, после того как она вызвана, все переменные нужно объявлять явно с помощью my, local или our, все подпрограммы должны быть объявлены, запрещается использование символических ссылок. Её рекомендуется использовать всегда и везде. Можешь показать ошибку? Дело в том, что даже в урезанной версии Perl, которая поставляется с Денвером, она есть и должна быть. Скорее всего она тебе выдала сообщение об ошибке из-за того, что у тебя не объявлены переменные, либо вызывается подпрограма до её объявления, либо используется символическая ссылка.
То, что написал BlackLFL, лучше всего использовать для обновления текущей страницы, например: при обновлении фрейма с сообщениями в чате или когда нужно вывести сообщение и через определённый интервал времени перенаправить пользователя. Если загрузка страницы, вообще не нужна то используй пример с Location. Отличие в том, что если пользоваться способом с META тегом, то сначала страница, с этим тегом должна загрузиться, затем срабатывает перенаправление. Вариант с Location, который я привёл выше, делает перенаправление как-только будет загружен заголовок, т.е. загрузки страницы, с которой делается перенаправление, не будет вообще. Работать этот вариант будет на порядок быстрее. |
| Автор: BlackLFL 27.1.2006, 12:21 |
| korob2001 а этот метод во всех браузерах отработает? где-то я слышал, что нет, но утверждать не могу ... |
| Автор: sharq 27.1.2006, 13:41 | ||
| BlackLFL на такие вопросы ищем ответы в стандартах. Вот например, тег
поддерживает html 3.2 +, читаем http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/httpequiv.asp. Поэтому Только в тех, которые поддерживают стандарт html 3.2 и выше. |
| Автор: BlackLFL 27.1.2006, 14:38 |
| sharq я про Location говорил |
| Автор: korob2001 27.1.2006, 17:48 |
| Ну это вообще-то заголовок. Думаю любой браузер должен его распознать, ну разве что какой-нить самописный и не распознает. К тому же вариант с <META>, перенаправляет на уровне тела документа, т.е. для перенаправления браузер должен загрузить тело документа, а с Location, перенаправление происходит на уровне заголовка и соответственно тело документа грузить не нужно. Просто зачем грузить тело если при его загрузке юзер будет сразу же перенаправлен? Твой вариант отлично подошёл бы, если бы нужно было выдать сообщение об успешной отправке и через определённый интервал времени перенаправить его куда-нить, например: на главную страницу ресурса. Что бы юзер успел прочитать сообщение, перед тем, как будет перенаправлен. |
| Автор: BlackLFL 27.1.2006, 20:13 |
| korob2001 я это знаю, у меня был теоритический вопрос, надо покопать в интернете ... но думаю любой современный браузер точно понимает, скорей всего я "слышал звон, да не знаю где он" |
| Автор: Rezzonans 7.2.2006, 23:19 |
| BlackLFL , в общем-то korob2001 прав. Использую переадрисацию с помощью location почти с первого дня, как начал на perle писать, случались конечно глюки непонятно из-за чего (кстати, может это как-то с кешем связано?), но в основном никогда эта директива не подводила. |