| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Catalyst проблемы с отправкой POST |
| Автор: mrrico 28.7.2009, 17:51 |
| Всем привет. Юзаю версию Catalyst 5.80007 под FreeBSD. Использую учебный пример с книгой Chapter4 (http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial/). При заведении новой книги через форму отрабатывает MyApp::Controller::Books метод form_create_do. Думал у меня проблема, потом скопировал код из примеров - ошибка та же: При отправке данных через форму после выполнения рабочего кода (т.е. книга создаётся), выполняется ещё один запрос на GET. Соотвественно, вижу не books/create_done.tt2, а $c->response->body( $c->welcome_message ) из Root.pm index. Откуда у меня этот GET? Всю голову уже сломал. Помогите, плз. Вот лог сервака: [debug] "GET" request for "books/form_create_do" from "xxxxxxx" [debug] Path is "/books/form_create_do" [debug] *** INSIDE BASE METHOD *** [debug] Rendering template "books/create_done.tt2" [info] Request took 0.136692s (7.316/s) .------------------------------------------------------------+-----------. | Action | Time | +------------------------------------------------------------+-----------+ | /books/base | 0.001239s | | /books/form_create_do | 0.083337s | | /end | 0.042404s | | -> MList::View::TT->process | 0.040402s | '------------------------------------------------------------+-----------' [info] *** Request 5 (0.021/s) [76722] [Tue Jul 28 18:57:42 2009] *** [debug] "GET" request for "/" from "xxxxxxxx" [debug] Path is "/" [info] Request took 0.008734s (114.495/s) .------------------------------------------------------------+-----------. | Action | Time | +------------------------------------------------------------+-----------+ | /index | 0.000648s | | /end | 0.000635s | '------------------------------------------------------------+-----------' |
| Автор: sir_nuf_nuf 28.7.2009, 21:33 |
| код в контроллера студию. P.S. а вы шаблон то как-нибудь вызываете ? |
| Автор: mrrico 29.7.2009, 09:50 |
| В общем, ситуацию решил. Если так можно сказать. Код контроллера - Books.pm из стандартных примеров (ссылку я указывал). Описание: Я запускаю сервер, он соотвесвтенно, на 3000 порту поднимает перловый http серврер. И, через IE всё работает нормально (!). А вот FF 3.5.1 при запросах через POST на урлы типа http://any_domain.ru:3000/books/form_create_do после выполнения POST отправляет ещё и GET на http://any_domain.ru:3000/ Я очь люблю огнелиса, но получается ишак в данном случе рулит. Причина ошибки, что я наблюдаю в FF. Думаю, и под FF всё будет работать замечательно в боевом режиме, когда проброс будет сделан через nginx и FF перестанет смущаться 3000 порта. |
| Автор: sir_nuf_nuf 29.7.2009, 15:14 |
| mrrico, бред какой - то.. то что FF делает - еще запрос - это его дело. но при POST запросе - он должен показывать данные пришедшие в ответ, а не что то - еще. Посмотрите Firebugом сервер данные возвращает ? код ответа 200 ? может там какой редирект приходит ? |
| Автор: mrrico 29.7.2009, 17:25 |
| Я знаю, что бред похоже )) Файербаг показывает переход на "/". Этого запроса я не делаю. Отправляю post на http://any_domain.ru:3000/books/form_create_do. Ишак отрабатывает (лог сервера POST "/books/form_create_do") и показывает нужный шаблон. А в случае FF лог сервера показывает POST, а затем GET "/" Ошибка получается не в коде, а в браузере. Ну нет у меня редиректов.. нет. Тут парнишке с работы показывал (он на каталисте проект поднимал), он то же руками развёл. Хз. |
| Автор: sir_nuf_nuf 30.7.2009, 00:35 |
| mrrico, вероятность такой нехилой ошибки в ФФ -> 0 Посмотрите внимательнее Firebug -> net или LiveHttpHeaders (есть такой плагин для FF) - что возвращает сервер на первый запрос (т.е. на пост). А лучше пришлите все сюда. Интересно все-таки ) |
| Автор: mrrico 30.7.2009, 17:29 |
| Сори, за длинный пост, но так будет понятнее: Это Файербуг на странице form_create. ![]() Это после клика на сабмите ![]() Это лог Лайва ![]() Это серверный лог ![]() При этом, хочется отметить, что IE показывает в результате "ожидаемую страницу": ![]() И в логе только ![]() |
| Автор: sir_nuf_nuf 30.7.2009, 18:26 |
| мде.. Действительно сервер возвращает FF 200 и вроде даже какой - то контент. Что на ум приходит 1) действительно глючный FF - показывает что вы делаете GET запрос, хотя на самом деле POST 2) может Connection: close на него так влияет ? Вообщем убедитесь, что в ответе сервера файефоксу пиходит код 200 и правильный контент и считайте это глюком браузера =) |