Как сохранить подтверждающие сообщения после POST при выполнении перенаправления после отправки? - PullRequest
1 голос
/ 21 марта 2010

Hello Я ищу совет о том, как обмениваться определенными частями данных (т.е. сообщениями подтверждения после отправки) между отдельными запросами в веб-приложении.Позвольте мне объяснить:

Текущий подход:

  1. пользователь отправляет форму добавления / редактирования для ресурса
  2. , если не было ошибок,пользователю показывается подтверждение со ссылками на:
    • отправить новый ресурс (для формы «добавить»)
    • просмотреть отправленный / отредактированный ресурс
    • просмотреть все ресурсы (один шагвыше в иерархии)
  3. пользователь затем должен нажать на одну из трех ссылок, чтобы перейти (т. е. на страницу «выше»)

Прогрессивно,Форма и ее страница подтверждения являются одним набором классов.Страница выше, это другое.Технически они могут совместно использовать код, но на данный момент они оба независимы при обработке отдельных запросов.

Мы хотели бы изменить вышеизложенное следующим образом:

  1. пользователь отправляет форму добавления / редактирования для ресурса
  2. , если не было ошибок, пользователь перенаправляется на страницу со всеми ресурсами (один шаг выше в иерархии) с одним или несколькимиподтверждающие сообщения, отображаемые в верхней части страницы (например, сообщение об успешном завершении, кому был назначен запрос и т. д.)

Это будет:

  1. сохранить пользователей одним щелчком мыши (они должны пройти через многие из этих форм добавления / редактирования)
  2. перенаправление после отправки решит типичные проблемы с кнопками обновления / возврата браузера

Какой подход вы бы порекомендовали для обмена данными, необходимыми для сообщений подтверждения между двумя запросами, пожалуйста?

Я не уверен, поможет ли это,это приложение PHP, поддерживаемоеAPI RESTful, но я думаю, что это вопрос, не зависящий от языка.

Несколько простых решений, которые приходят на ум, - это обмен данными через куки или во время сеанса, однако это нарушает безгражданство и будетпредставляет значительную проблему для пользователей, которые работают на нескольких вкладках (данные могут конфликтовать друг с другом).Передача данных в качестве параметров GET не подходит, поскольку мы говорим о нескольких сообщениях, которые являются динамическими (например, смена актеров, даты).

Спасибо,M.

Ответы [ 2 ]

2 голосов
/ 21 марта 2010

Похоже, тип системы обмена сообщениями пользователей не требуется. Под этим я подразумеваю, что процесс может выглядеть примерно так:

  1. Пользователь отправляет форму
  2. Система может зарегистрировать пользователя для набора уведомлений / сообщений (хранить в таблице БД или что-то в том же духе.
  3. Система отправляет ответ перенаправления пользователю
  4. На следующей странице загрузки для пользователя система проверяет, есть ли у пользователя ожидающие сообщения.
  5. Если они это сделают, удалите их из списка / таблицы ожидания и добавьте их на страницу

Это избавит вас от проблемы с состоянием страницы, в то же время предоставляя пользователю сообщения, которые будут отображаться; обратите внимание, что вам может потребоваться настроить специфику для ваших нужд.

Надеюсь, это поможет.

1 голос
/ 24 марта 2010

ASP.NET

Поскольку вопрос представлен как независимый от языка, вас может заинтересовать ASP.NET Server.Transfer, который делает именно то, что вы хотите достичь.


PHP

Однако для PHP ситуация не кажется очень легкой, и все решения, которые приходят мне в голову, имеют запах дизайна:

Сессия

Использование сессий, чтобы пометить ваши данные определенными флагами, а затем проверить и использовать их на странице обзора. Вы просто должны быть уверены, что всегда сбрасываете эти данные после того, как они вам больше не нужны, что может быть сложно.

База данных

Поставьте в очередь эти данные в базе данных как confusedGeek, описанный в его посте , но я не думаю, что было бы хорошей идеей запрашивать каждый отдельный запрос, как этот. Если ваше приложение немного больше, запросов к серверу БД будет довольно много, что может замедлить процесс.

Curl

Воспользуйтесь преимуществами cURL в PHP, если у вас есть такая возможность:

<?php
$curl = curl_init( );

curl_setopt( $curl, CURLOPT_URL, "http://localhost/something.php" );
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $_POST );

curl_exec( $curl );
curl_close( $curl );
?>

<form action="test.php" method="post">
    <input id="textfield" name="textfield" />
    <input type="submit" />
</form>

Этот фрагмент кода занимает something.php на стороне сервера, позволяет отправлять ему данные POST и показывает их содержимое (в данном примере это может быть просто print_r( $POST );). Это может сделать то, что вам нужно, но у него есть еще один недостаток - URL не изменится, поэтому пользователи могут запутаться - и я бы не стал его рекомендовать.


Лично я думаю, что ваш случай может быть недостатком дизайна. Почему вы хотите взять все ресурсы со страницы формы и переместить их на другие? Не проще ли работать с вашими данными в файле / классе, предназначенном для этого, а затем просто решить, какой у вас результат? Если что-то не получается, он возвращает пользователя на страницу с формой, и если все прошло хорошо, вы отправляете данные в БД и показываете обзорную страницу с каким-то счастливым сообщением, что все прошло хорошо.

Если вы действительно хотите перейти к способу отправки всего на другую страницу, использование AJAX / AJAJ может стать для вас другим решением.

...