我在http://www.notonebit.com/projects/mailing-list/
找到了一个简单的邮件列表表单问题是,当我点击提交时,我希望它做的是在当前表单下显示一条消息,说“感谢订阅”,没有任何重定向。相反,它引导我进入一个全新的页面。
<form method="POST" action="mlml/process.php">
<input type="text" name="address" id="email" maxlength="30" size="23">
<input type="submit" value="" id="submit"name="submit" >
</form>
答案 0 :(得分:5)
您需要使用AJAX将数据发布到服务器。最好的解决方案是实现常规发布,这样至少可以工作。然后,您可以使用Javascript挂钩。这样,当有人没有Javascript时,发布将起作用(通过刷新)。
如果找到a good article on posting forms with AJAX using JQuery。
此外,您可以选择将数据发布到同一个网址。 JQuery库将添加HTTP_X_REQUESTED_WITH
标头,您可以在其中检查服务器端脚本中的值。这将允许您发布到相同的URL但返回不同的值(整个页面,或只是一个特定的响应,取决于是否是一个AJAX请求)。
因此,您实际上可以从表单中获取URL,也不需要在Javascript中对其进行编码。这允许您编写一个更可维护的脚本,甚至可以导致一个通用的表单处理方法,您可以重用所有要使用Ajax发布的表单。
答案 1 :(得分:4)
使用jQuery非常简单:
<form id="mail_subscribe">
<input type="text" name="address" id="email" maxlength="30" size="23">
<input type="hidden" name="action" value="subscribe" />
<input type="submit" value="" id="submit"name="submit" >
</form>
<p style="display: none;" id="notification">Thank You!</p>
<script>
$('#mail_subscribe').submit(function() {
var post_data = $('#mail_subscribe').serialize();
$.post('mlml/process.php', post_data, function(data) {
$('#notification').show();
});
});
</script>
并在您的process.php中:
<?php
if(isset($_POST['action'])) {
switch($_POST['action']) {
case 'subscribe' :
$email_address = $_POST['address'];
//do some db stuff...
//if you echo out something, it will be available in the data-argument of the
//ajax-post-callback-function and can be displayed on the html-site
break;
}
}
?>
答案 2 :(得分:3)
由于您的action
属性,它会重定向到其他网页。
尝试:
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<input type="text" name="address" id="email" maxlength="30" size="23" />
<input type="submit" value="" id="submit" name="submit" />
</form>
<?php if (isset($_POST['submit'])) : ?>
<p>Thank you for subscribing!</p>
<?php endif; ?>
用户点击提交按钮后,该页面将显示“感谢您”消息。
另外,由于我不知道您的代码所在页面的名称,因此我插入了一个超全局变量,该变量将插入当前正在执行的脚本的文件名,相对于文档根 。因此,此页面将自行提交。
答案 3 :(得分:1)
你必须使用AJAX。但这需要JavaScript在用户Brwoser上活跃。 在我看来,这是没有重定向的唯一方法。
答案 4 :(得分:0)
假设您无法控制您要发布到的页面,那么这个想法可能对您有用:
为操作创建您自己的“代理php目标”,然后回复您想要的消息。然后,可以使用http_post_data转发发布到php文件的数据(使用预编码数据执行POST请求)。您可能需要稍微解析一下。
答案 5 :(得分:0)
发送表单请求而不重定向在php中是不可能的,但有一种方法可以解决它。
<form method="post" action="http://yoururl.com/recv.php" target="_self">
<input type="text" name="somedata" id="somedata" />
<input type="submit" name="submit" value="Submit!" />
</form>
然后为php页面发送它让它做某事但不要回显结果,而只是使用
重定向 header( 'Location: http://yourotherurl.com/formpage' );
如果您希望它发回成功消息,只需执行
$success = "true";
header( 'Location: http://yourotherurl.com/formpage?success='.$success);
并在formpage上添加
$ success = $ _GET [&#39;成功&#39;];
if($ success ==&#34; true&#34;){echo&#39;您的成功消息&#39 ;; } else {echo &#39;您的失败信息&#39;;
答案 6 :(得分:0)
中文版
似乎没有人解决此问题 没有javascript或ajax
您还可以执行以下操作。
使用这些函数保存一个php文件,然后将它们发送到您页面的索引
实施例
的index.php
<?php
if(isset($_POST['enable'])) {
echo "Enable";
} else {
}
if(isset($_POST['enable'])) {
echo "Enable";
} else {
}
?>
Tools.php(它可以是任何名称,请注意它保存在文件夹中的lame工具中)
for
答案 7 :(得分:-2)
使用
form onsubmit="takeActions();return false;"
function takeAction(){ var value1 = document.getElementById('name').innerHTML; // make an AJAX call and send all the values to it // Once , you are done with AJAX, time to say Thanks :) document.getElementById('reqDiv').innerHTML = "Thank You for subscribing"; }