Я знаю, как получить ответ AJAX:
$.post( '/action',
{ actiontodo: 'insert' }
function (data) { alert(data); } );
Внутри action.php (на стороне сервера):
<?php
if ($_POST['actiontodo'] == 'insert')
{
doInsertAction();
echo "inserted";
}
?>
Наконец, результатом этого кода является предупреждение BOX со словом: вставлено.
НО без ajax у меня есть два способа решить эту проблему (на стороне сервера):
ОДИН:
<?php
if ($_POST['actiontodo'] == 'insert') {
doInsertAction();
header( "Location: " . $_SERVER['HTTP_REFERER'] . " &response=inserted" );
} ?>
ДВА:
<?php
session_start();
if ($_POST['actiontodo'] == 'insert') {
doInsertAction();
$_SESSION['response'] = 'inserted';
}
header( "Location: " . $_SERVER['HTTP_REFERER'] );
?>
Возвращаясь на страницу, я получаю ответ от SESSION или от GET и показываю предупреждение.
Мне больше нравится ОДНО решение, но у каждого решения есть проблема:
ОДНА проблема:
Возвращаемый URL: http://www.foo.com/myrefererurl&response=inserted.
Если вы введете этот URL-адрес, не используя форму, вы будете видеть окно предупреждения каждый раз, когда будете обновлять страницу. Вопрос: Как показать сообщение только ОДИН раз? (ТОЛЬКО ПОСЛЕ ДЕЙСТВИЯ ФОРМЫ)
ДВА ПРОБЛЕМЫ:
В SESSION теперь вставлено значение ($_SESSION['response']), когда страница возвращается из действия, очевидно, решение может удалить это значение сеанса, например: unset($_SESSION['response'], но ПРЕДПОЛАГАЕМ, что UNSET не достигнуто по какой-либо причине (сбой соединения или навигация остановлена пользователем и т. д.), когда вы переходите к другой форме на другой странице, отображается предупреждение, поскольку $_SESSION['response'] все еще существует (в другой форме без отправки и не имеет ничего общего с этим ответом).
Я надеюсь, что вы понимаете эти вопросы и предлагаете ЛУЧШЕЕ решение. В основном вопрос в том, как контролировать эти ответы......
$_SERVER['HTTP_REFERER']
, вы должны опубликовать имя страницы или что-то еще, чтобы идентифицировать ее и использовать это значение для перенаправления. Лично я выберу второе решение: вы можетеunset
использовать однажды использованную переменную, и у нее не должно быть никаких причин не бытьunset
- person Shikiryu   schedule 04.10.2010Location:xyz.com
указывает браузеру перейти по указанному URL-адресу, а не серверу. Откройте Firebug и просмотрите сетевой трафик с включеннымPersist
, чтобы увидеть его в действии. Вы хотите не полагаться на него в своей бизнес-логике, за исключением случаев, когда целевая страница является фактической конечной точкой вашего приложения. - person Andrew   schedule 04.10.2010