我有一个HTML表单,用PHP提交电子邮件,当它提交时,它会重定向到该PHP页面。有没有办法防止这种重定向发生?我使用jQuery构建了一个动画,我想要发生而不是重定向。我试过返回false;但它不起作用。这是我的功能:
$(function() {
$('.submit').click(function() {
$('#registerform').submit();
return false;
});
});
这是开场表格标签:
<form id="registerform" action="submit.php" method="post">
提交按钮:
<input type="submit" value="SUBMIT" class="submit" />
答案 0 :(得分:34)
您应该使用ajax发布它,这将阻止它更改页面,您仍然可以获取信息。
$(function() {
$('form').submit(function() {
$.ajax({
type: 'POST',
url: 'submit.php',
data: { username: $(this).name.value,
password: $(this).password.value }
});
return false;
});
})
答案 1 :(得分:12)
您可以尝试event.preventDefault();而不是返回false。像这样:
$(function() {
$('#registerform').submit(function(event) {
event.preventDefault();
$(this).submit();
});
});
答案 2 :(得分:5)
如果您希望PHP页面处理表单中的信息,那么您必须调用该PHP页面。要避免在此过程中重定向或刷新,请通过AJAX提交表单信息。也许使用jQuery对话框来显示结果或自定义动画。
答案 3 :(得分:5)
使用jQuery Ajax请求方法,您可以将电子邮件数据发布到脚本(submit.php)。执行脚本后,使用success
回调选项为元素设置动画。
note - 我建议使用ajax响应对象来确保脚本成功执行。
$(function() {
$('.submit').click(function() {
$.ajax({
type: 'POST',
url: 'submit.php',
data: 'password=p4ssw0rt',
error: function()
{
alert("Request Failed");
},
success: function(response)
{
//EXECUTE ANIMATION HERE
} // this was missing
});
return false;
});
})
答案 4 :(得分:5)
$('#registerform').submit(function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: 'submit.php',
data: $(this).serialize(),
beforeSend: //do something
complete: //do something
success: //do something for example if the request response is success play your animation...
});
})
答案 5 :(得分:4)
如果不知道你想要在这里完成什么,很难说,但如果你花时间用javascript来解决这个问题,那么AJAX请求将是你最好的选择。但是,如果您想在PHP中完全使用它,请将其放在脚本的末尾,并且应该设置它。
if(isset($_SERVER['HTTP_REFERER'])){
header("Location: " . $_SERVER['HTTP_REFERER']);
} else {
echo "An Error";
}
这仍然会导致页面更改两次,但用户将在发起请求的页面上结束。这甚至没有接近正确的方法,我强烈建议使用AJAX请求,但它将完成工作。
答案 6 :(得分:3)
如果你可以运行javascript,你可以创建一个新的iframe,然后发布到那个iframe。您可以执行<form target="iframe-id" ...>
这样,所有重定向都会发生在iframe中,您仍然可以控制页面。
另一个解决方案是通过ajax发帖子。但如果页面需要进行错误检查或其他事情,那会更棘手。
以下是一个例子:
$("<iframe id='test' />").appendTo(document.body);
$("form").attr("target", "test");
答案 7 :(得分:1)
HTTP的设计意味着使用数据进行POST将返回页面。原始设计师可能打算将其作为POST的“结果”页面。
PHP应用程序回到同一页面是正常的,因为它不仅可以处理POST请求,而且可以根据原始GET生成更新的页面,但使用POST中的新信息。但是,没有什么能阻止您的服务器代码提供完全不同的输出。或者,您可以POST到完全不同的页面。
如果你不想输出,我在AJAX起飞之前看到的一种方法是服务器返回(我认为)250的HTTP响应代码。这称为“无内容”,这应该是让浏览器忽略数据。
当然,第三种方法是使用您提交的数据进行AJAX调用。
答案 8 :(得分:1)
简单的答案是通过AJAX请求将您的呼叫发送到外部脚本。然后按照你喜欢的方式处理响应。
答案 9 :(得分:1)
您可以使用以下
e.preventDefault()
如果调用此方法,则不会触发事件的默认操作。
另外,如果我建议你阅读:.prop()vs .attr()
我希望它会对你有帮助,
代码示例:
$('a').click(function(event){
event.preventDefault();
//do what you want
}
答案 10 :(得分:1)
就像布鲁斯阿姆斯特朗在his answer中所说的那样。但是我会使用FormData
:
$(function() {
$('form').submit(function() {
var formData = new FormData($(this)[0]);
$.ajax({
type: 'POST',
url: 'submit.php',
data: formData,
processData: false,
contentType: false,
});
return false;
});
})
答案 11 :(得分:1)
你必须把return放在submit()调用中。
$('.submit').click(function() {
$('#registerform').submit(function () {
sendContactForm();
return false;
});
//Here you can do anything after submit
}
答案 12 :(得分:0)
您可能只需要对页面执行Ajax请求。做return false
并没有做你认为它正在做的事情。
答案 13 :(得分:0)
您只需在控制器上将操作结果作为NoContentResult即可
public NoContentResult UploadFile([FromForm] VwModel model)
{
return new NoContentResult();
}
答案 14 :(得分:0)
由于它绕过CORS和CSP,因此将保留在工具箱中。这是一个变种。
这将在localhost:8080
上发布base64编码的对象,并在使用后清理DOM。
const theOBJECT = {message: 'Hello world!', target: 'local'}
document.body.innerHTML += '<iframe id="postframe" name="hiddenFrame" width="0" height="0" border="0" style="display: none;"></iframe><form id="dynForm" target="hiddenFrame" action="http://localhost:8080/" method="post"><input type="hidden" name="somedata" value="'+btoa(JSON.stringify(theOBJECT))+'"></form>';
document.getElementById("dynForm").submit();
dynForm.outerHTML = ""
postframe.outerHTML = ""
从网络调试器选项卡中,我们可以观察到从http://
页到tls/https
未加密服务器的POST成功。
答案 15 :(得分:0)
我在原始帖子发表10年后找到了此页面(!),因此需要以香草js(而不是AJAX)作为答案。我借助@gargAman的答案弄清楚了。
使用适当的选择器将按钮分配给变量,例如
document.getElementById('myButton')
然后
myButton.addEventListener('click', function(e) {
e.preventDefault();
// do cool stuff
});
我应该注意,我的html如下所示(具体来说,我没有在按钮中使用type="Submit"
,在表单中没有使用action=""
:
<form method="POST" action="" id="myForm">
<!-- form fields -->
<button id="myButton" class="btn-submit">Submit</button>
</form>