我有一个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>");
});
});