我正在处理一个简单的 ajax 邮件,我的 html 看起来像这样:
<form id="contact_form">
<input name="name" id="name" placeholder="[ NAME ]" type="text"> <br />
<input name="company" id="company" placeholder="[ COMPANY ]" type="text"> <br />
<input name="designation" id="designation" placeholder="[ DESIGNATION ]" type="text"> <br />
<input name="phone" id="phone" placeholder="[ PHONE ]" type="text"> <br />
<input name="email" id="email" placeholder="[ EMAIL ]" type="text"> <br />
<textarea name="message" id="message" rows="4" cols="50" style="color:#FFF;" Placeholder="[ HOW CAN WE HELP? ]"></textarea><br />
<input type="submit" id="submit_btn" value="Submit" style="width:262px; height:30px;">
<div id="result" style="background-color:#7A706B; color:#FFF; text-align:center; width:280px; height:250px; position:absolute; left:10px; top:30px; padding-top:100px; display:none; font-size:16px;"> You Expressed. We Understand.<br /><br />[Welcome to the world of business innovation]<br /><br />You’ll be clarified shortly…</div>
</form>
我的jquery看起来像这样:
$(function() {
$("#submit_btn").click(function(){
var data = {
name: $("#name").val(),
company: $("#company").val(),
designation: $("#designation").val(),
phone: $("#phone").val(),
email: $("#email").val(),
message: $("#message").val()
};
// AJAX Code To Submit Form.
$.ajax({
type: "POST",
url: "mail.php",
data: data,
cache: false,
success: function(result){
$( "#result" ).fadeIn(1000);
}
});
});
});
问题是当我单击"提交"按钮时,它会在地址栏中显示所有数据.php而不是通过POST方法将其发送到邮件。
PS:当我使用 alert() 而不是 $( "#result" ).fadeIn(1000) 时;它工作正常。
有人可以帮忙吗?谢谢。
您需要取消提交并使用提交事件而不是单击
$(function() {
$("#contact_form").on("submit",function(e){
e.preventDefault(); // will cancel the submit even if errors below
// rest of code
});
});
评论者注意:
提交按钮的有效用例是按 Enter 将触发提交处理程序。这通常是有用的。如果您不希望 enter 提交,那么确实使按钮 type=button 并将 ajax 处理程序分配给单击此按钮而不是提交。
添加 e.preventDefault(); 到您的点击回调:
$("#submit_btn").click(function() {
e.preventDefault();
// ...
});
尝试输入绝对 URL 而不是 url: "mail.php"
. 并在click(function(){});
回调结束时return false;
。
三分
-
您必须通过
event.preventDefault()
阻止默认操作 - 侦听提交事件而不是单击事件
- 使用
.serialize()
方法收集数据
代码工作所必需的;另外两点是建议。
$(function() {
$("#contact_form").on('submit', function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "mail.php",
data: $(this).serialize(),
cache: false,
success: function(result){
$( "#result" ).fadeIn(1000);
}
});
});
});
奖金
只是为了让您了解GET
(默认)和POST
之间的区别,如果您只在 HTML 中进行以下更改,您将不会在地址栏中看到数据。然而,您的表单仍然不会通过 ajax 提交,因为默认操作仍然有效。
<form id="contact_form" method="post">