Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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.
user posted image

Это после клика на сабмите
user posted image

Это лог Лайва
user posted image

Это серверный лог
user posted image





При этом, хочется отметить, что IE показывает в результате "ожидаемую страницу":
user posted image

И в логе только
user posted image

Автор: sir_nuf_nuf 30.7.2009, 18:26
мде.. Действительно сервер возвращает FF 200 и вроде даже какой - то контент.

Что на ум приходит
1) действительно глючный FF - показывает что вы делаете GET запрос, хотя на самом деле POST
2) может Connection: close на него так влияет  ?

Вообщем убедитесь, что в ответе сервера файефоксу пиходит код 200 и правильный контент и считайте это глюком браузера =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)