停止提交表单刷新页面

时间:2014-03-15 11:18:02

标签: php ajax forms refresh

我遇到了问题,因为每次有人提交表单时我的网站会重新加载。

这是一个大卷轴,所以我发现了另一个解决方案,但给了我一个错误。

PHP代码:

<?php
session_name("fancyform");
session_start();


$_SESSION['n1'] = rand(1,20);
$_SESSION['n2'] = rand(1,20);
$_SESSION['expect'] = $_SESSION['n1']+$_SESSION['n2'];


if(isset($_SESSION['sent']))
{
$success='<h1>Thank you!</h1>';
unset($_SESSION['sent']);
header('Location: index.php#5'); 
}
?>

表格代码:

<form class="demo-form" name ="demo-form" data-parsley-validate method="post" action="submit.php" >
            <ul>
                <li class="js-hide-label">
                    <label for="name">Nombre:</label>
                    <input type="text" placeholder="Nombre" id="name" name="name" data-parsley-trigger="change" required tabindex="1" autocomplete="off" value="<?php echo (isset($_SESSION['post']['name']) ? $_SESSION['post']['name'] : ''); ?>" >
                </li>
                <li class="js-hide-label">
                    <label for="email">Your Email:</label>
                    <input type="email" placeholder="Your Email" id="email" data-parsley-trigger="change"  name="email"  autocomplete="off" required tabindex="2" value="<?php echo (isset($_SESSION['post']['email']) ? $_SESSION['post']['email'] : ''); ?>">
                </li>
                <li class="js-hide-label">
                    <label for="message">Message:</label>
                    <textarea placeholder="Message…" id="message" name="message" tabindex="3" required data-parsley-trigger="keyup" textarea id="message" data-parsley-minlength="20" data-parsley-maxlength="100" data-parsley-minlength-message = "Come on! You need to enter at least a 20 caracters long comment.." data-parsley-validation-threshold="10"><?php echo (isset($_SESSION['post']['message']) ? $_SESSION['post']['message'] : ''); ?></textarea>
                </li>
                               <input   class="btn btn-default"type="submit" name="button" id="button" value="Submit" />
            </ul>
                          <?php echo isset($success)?$success:''; ?>

        </form>

正如您所看到的,使用header('Location: index.php#5');添加可能的解决方案会使我的网站回到联系表单(不完全是我想要的,但有所帮助),但它打破了$success='<h1>Thank you!</h1>';

使用AJAX有没有简单的方法(使用我的原始代码)?因为我不习惯使用脚本。

另一方面,可以是展示$success='<h1>Thank you!</h1>';的解决方案,并使函数header('Location: index.php#5');在同一表单上工作吗?

3 个答案:

答案 0 :(得分:0)

使用标题并重定向页面。

header("Location:your_page.php");

您可以重定向到同一页面或不同页面。

<?php
session_name("fancyform");
session_start();


$_SESSION['n1'] = rand(1,20);
$_SESSION['n2'] = rand(1,20);
$_SESSION['expect'] = $_SESSION['n1']+$_SESSION['n2'];


if(isset($_SESSION['sent']))
{

unset($_SESSION['sent']);
header('Location: index.php?msg=sucess'); 
}

if ( isset($_GET['msg']) && $_GET['msg'] == 'sucess' )
{
$success='<h1>Thank you!</h1>';
}

答案 1 :(得分:0)

如果您不想刷新页面,请使用Ajax发布数据。

请参阅此处的文档

$.post documentation

Ajax

答案 2 :(得分:0)

你可以试试这个: -

使用会话

if(isset($_SESSION['sent']))
{       
   unset($_SESSION['sent']);

   $_SESSION['thanks_msg'] = 'Thank You';

   header('Location: index.php#5'); 
}
?>

在index.php文件中: -

检查是否设置了$ _SESSION ['thanks_msg'],如果设置则显示会话消息。

使用GET方法: -

if(isset($_SESSION['sent']))
{
  $success='Thank you!';
  unset($_SESSION['sent']);
  header('Location: index.php?msg='.$success); 
}
?>

在index.php文件

if(isset($_GET['msg']))
{
    echo $_GET['msg'];
}

编辑: -

if(isset($_SESSION['sent']))
{
  $success='Thank you!';
  unset($_SESSION['sent']);
  header('Location: index.php?msg='.$success); 
}
?>

在index.php文件

if(isset($_GET['msg']))
{
    echo $_GET['msg'];
}