表单总是发布到其中的“action”属性。如果您不希望它发布给自己,请将您的表单开始标签设置为<form action="someexample.php" method="post">。结果将是 POST 数据发送到someexample.php,而不是发送到与表单相同的页面。
如果您正在查看一个页面上的多个表单选项而无需重定向,请查看 AJAX 提交。
我们的想法是将表单发送到您的接收文件,处理 POST 数据,并返回您想要从该过程返回的任何内容。例如:
$("form").submit( function(event) {
event.preventDefault(); //prevent the file submitting
var formData = $(this).serialize(); //process the form into an array for submission
$.ajax({
url: "receiver.php", //the url of the receiving file
type: "post", //setting method to post
data: formData, //set the data being sent to the form contents
success: function(response) {
$("div").html(response); //set the receiving div to the html you echo'd in the php document
}
});
});
您的receiver.php 文件看起来与接收POST 数据的普通PHP 文档完全相同,因此<?php if(isset($_POST['submit'])) {} ?> 仍将完全按照您的预期工作,而无需页面重定向!不过,此解决方案确实需要 jQuery。
编辑:
针对if(criteria) { $abc = 'xyz'; }的问题更新,有几点建议。
要保持异步方法,请使用$_SESSION 变量。您可以使用receiver.php 设置它们并在起始文档中处理它们。
要返回到同一个文档的标准提交方法,请将您的多个选项分解为单选输入、复选框或单独的表单。
所以:
<input type="radio" name="method" value="submit" />
<input type="radio" name="method" value="clear" />
这样你可以选择在那里提交的方法。
或者您可以将它们分解为形式:
<form method="post">
<input type="submit" name="submit" value="submit" />
</form>
<form method="post">
<input type="submit" name="clear" value="clear" />
</form>
最后,如果您想在提交和清除之间切换,您可以在点击时更改隐藏输入的值,因此:
HTML:
<form method="post">
<input type="hidden" id="method" name="method" value="" />
<input type="submit" id="submit" value="submit" name="submit" />
<input type="submit" id="clear" value="clear" name="clear" />
</form>
jQuery:
$("#submit").click( function(event) {
event.preventDefault();
$("#method").val("clear"); //set the method to clear
$("form").submit(); //submit the form normally
});
$("#clear").click( function(event) {
event.preventDefault();
$("#method").val("submit");
$("form").submit();
});
PHP:
<?php
if(isset($_POST['submit'])) {
//do something
} elseif(isset($_POST['clear'])) {
//do something else
}