当点击提交按钮时,在PHP中临时更改同一页面上的HTML结构


Temporarily changing HTML structure on the same page in PHP when submit button is clicked?

我有一个PHP页面,有提交按钮到另一个URL。

我想在提交按钮点击后重新加载当前页面,并将div添加到HTML。

我的页面url是:/foo.php,在HTML中我有:

<button onclick="$.get('/bar', function() { ... })">Submit</button>

你可以看到表单发送请求到/bar页。

我想重新加载/foo.php(当前页面),并将HTML更改为:

<button onclick="$.get('/bar', function() { ... })">Submit</button>
<div>Thank you!</div>

我的问题是我怎么知道用户点击按钮和刷新是因为点击,而不是因为导航。

另一件事,如果可能的话,我希望新的div将消失,如果用户再次刷新页面

为什么不在get函数的成功回调中添加div呢?你不需要重新加载页面

<div id="btn_area">
    <button onclick="$.get('/bar', function() { $('#btn_area').append($('<div>').html('Thank You');)})">Submit</button>
</div>

顺便说一下,我不建议将javascript从html中分离出来,而不是直接放在DOM中。

另一个方法是,在同一侧触发一个带有隐藏参数的附加表单。之后,在服务器端检查隐藏参数并显示div。

第三个方法是,在Callback中设置一个cookie,重新加载,检查cookie,显示div并再次删除cookie。

在我看来,第一个提到的选项(在回调中直接添加div而不重新加载)将是迄今为止"最漂亮的",但当然我不知道你的网站上还有什么

或者,如果您选择在PHP中这样做,您可以模拟flash会话(一次性使用会话)。考虑这个例子:

直接给

<?php session_start(); ?>
<form method="POST" action="bar.php">
    <button type="submit" name="thank_you">Submit</button>
</form>
<?php if(isset($_SESSION['thank_you'])): ?>
<?php unset($_SESSION['thank_you']); ?>
    <h1>Thank You!</h1>
<?php endif; ?>

写到

<?php
session_start();
if(isset($_POST['thank_you'])) {
    $_SESSION['thank_you'] = true;
    // processes
    header('Location: foo.php');
}
?>

Demo

你可以在js端处理。只要发出请求,在回调中,你可以操作dom。

<button>Submit</button>
$("button").on("click", function() {
   var $button = $(this);
   $.get("/echo/html", function() {
       $button.after("<div>Thank you!</div>");
   });
});