JQuery запускает Ajax-запрос при нажатии кнопки назад - PullRequest
2 голосов
/ 20 марта 2011

У меня есть страница с 80+ динамически генерируемыми полями ввода, когда пользователь отправляет форму на другую страницу .php, и один из входных данных содержит значение, не являющееся числовым, он отправляет их обратно на страницу входных данных, используя: <?php header("Location: javascript:history.back()"); ?>, одновременно регистрирует ошибку в переменной сеанса. Причина, по которой я использую javascript: history.back (), заключается в том, что он хранит значения, которые были в форме, даже когда вы нажимаете кнопку «назад». Но поскольку он кэширует страницу, я не могу вывести ошибку в том же скрипте .php, поэтому я добавил элемент и некоторый Ajax-код. Код Ajax извлекает другой файл с именем error.php, который содержит:

<?php
header("Cache-Control: no-cache"); 
session_start();
if(isset($_SESSION['error'])) 
{
    echo $_SESSION['error'];
    unset($_SESSION['error']);
}
?>

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

<script type="text/JavaScript"> 
 $(document).ready(function(){ 
     $("#error p").load("error.php"); 
 });
 </script>

Есть идеи?

Спасибо
Джастин

Ответы [ 2 ]

1 голос
/ 20 марта 2011

Использование header("Location: javascript:history.back()") обычно не рекомендуется.

Используйте абсолютный путь, то есть

header('Location: /forms/input.php');

0 голосов
/ 20 марта 2011

Вы можете избежать отправки формы полностью и отправки данных с помощью вызова AJAX - сервер может проверить данные и отправить обратно либо «успех», либо список ошибок проверки.

В случае успеха перейдите к следующему URL-адресу (возможно, указанному вместе с сообщением об успехе)

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

...