【发布时间】:2013-09-29 17:47:39
【问题描述】:
我正在注册时事通讯,用户输入他们的电子邮件并单击表单提交按钮。问题是时事通讯注册在我的页脚中,它显示在网站的每个页面上。现在我有 action="newsletter.php" ,它会向我发送一封电子邮件,其中包含他们用来注册的电子邮件。我可以有一个 "window.location=""" 但我希望它返回到它们来自的页面(因为页脚可能在网站的任何页面上)。
现在,我想知道是否有办法不让表单操作成为“newsletter.php”,而是让 php 只在页脚文件中,这样他们甚至永远不会离开他们所在的页面首先,一个简单的 window.alert 可以让他们知道他们的注册成功,并且无论他们在网站的哪个页面上,他们都可以继续做他们正在做的事情。
在从谷歌得到想法并自己尝试之后,我尝试制作一个 javascript 函数,其中包含向我发送一封包含他们输入的电子邮件的电子邮件所需的 php,但显然每次任何页面都向我发送一封空白电子邮件加载的网站。我也尝试过“isset”,但问题是 action="" 只是在 isset 可以检查他们是否输入电子邮件之前重新加载页面。
NEWSLETTER.PHP-
<?php
$field_emailInput = $_POST['emailInput'];
$mail_to = 'josh@cutephilosophy.com';
$subject = 'NEWSLETTER SUBSCRIBER';
$body_message .= 'This person subscribed for email updates: ';
$body_message .= 'E-Mail: '.$field_emailInput."\n";
$headers = 'From: '.$field_emailInput."\r\n";
$headers .= 'Reply-To: '.$field_emailInput."\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
window.alert('You Are Now In The Loop!');
//window.location = 'index.php';
window.location ='history.back()';
</script>
<?php
}
else { ?>
<script language="javascript" type="text/javascript">
alert('Something broke, email josh@cutephilosophy.com about the problem!');
window.location = 'index.php';
</script>
<?php
}
?>
您会注意到我在使用 action="newsletter.php" 方法时尝试了“history.back()”,这是可行的,但是当显示 window.alert 时,您处于一个完整的白色页面而不是页面他们最初是打开的,然后你被重定向回来。
【问题讨论】:
-
如果我提交了一份订阅时事通讯的表格,我希望看到一个确认页面,这样我就知道它已经成功了。在那之后,大多数人都可以点击浏览器的后退按钮。
-
如果您根本不想让他们离开页面,您需要使用 AJAX。
-
您不需要需要 Ajax,您可以使用 HTTP 204 No Content 响应来代替。不过,不提供反馈仍然是一个糟糕的主意。
-
Quentin,就用户体验而言,我不认为一个新页面是可取的,这可能会失去观众,因为他们觉得他们已经“完成”了他们的业务。我宁愿只显示一个弹出窗口,说它有效,这样他们就可以立即回到他们正在做的事情。
标签: javascript php html forms email