3 回答
TA贡献1772条经验 获得超5个赞
这是完整的工作代码。ajax
您的和中的问题很少HTML
您需要
dataType: json
在$.ajax
请求中进行设置,因为从 PHP 文件返回的响应是 json 格式。您的 HTML 不包含任何
.messages
将显示成功或错误消息的 div此外,您需要使用此 =>
$('#contact-form').submit(function(e){})
进行form
提交并使用e.preventDefault()
它来确保页面在form
提交时不会重新加载
我认为您的PHPMailer
工作正常并且已经在发送电子邮件。您只需要使用以下 HTML 和jQuery
代码,以便成功消息显示在contant.php
页面上而不是另一个页面上。
我已经测试了我的代码,localHost
并且运行良好,并且还发送了email
正确的表单信息。data
jQuery
$(function() {
$('#contact-form').submit(function(e) {
e.preventDefault()
var url = "mail.php";
//POST values in the background the the script URL
$.ajax({
type: "POST",
url: url,
dataType: 'json',
data: $(this).serialize(),
success: function(data) {
// data = JSON object that contact.php returns
// apply success/danger
var messageAlert = 'alert-' + data.type;
var messageText = data.message
// Bootstrap alert box HTML
var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable" role="alert"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' + messageText + '</div>'
// If we have messageAlert and messageText
if (messageAlert && messageText) {
// inject the alert to .messages div in our form
$('.form-container').find('.messages').html(alertBox);
// empty the form
$('#contact-form')[0].reset();
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.error('The ajax request failed:' + errorThrown);
}
});
return false;
})
});
超文本标记语言
<div class="form-container">
<form id="contact-form" method="post" action="mail.php" name="contact-form" role="form">
<div class="row">
<div class="col-md-6" style="padding-right: 4px;">
<input type="text" name="first_name" id="name" placeholder="Name" required />
</div>
<div class="col-md-6" style="padding-left: 4px;">
<input type="email" name="email" id="email" placeholder="Email" oninvalid="this.setCustomValidity('Please enter valid email address.')" onchange="this.setCustomValidity('')" required />
</div>
</div>
<input type="text" name="subject" id="subject" placeholder="Why are you contacting me?" required />
<textarea name="message" id="message" cols="30" rows="10" placeholder="Tell me more about your propersition?" required></textarea>
<input type="submit" id="submit" name="submit" value="submit">
<label class="checkbox-label">
<input type="checkbox" id="tos" name="tos" oninvalid="this.setCustomValidity('Please read the Terms of Service.')" onchange="this.setCustomValidity('')" required>
<span class="checkbox-custom rectangular"></span>
</label>
<label for="tos">I agree to the <a href="tos.php">Terms of Service</a></label>
</form>
<div class="messages"></div>
</div>
TA贡献1111条经验 获得超0个赞
您需要更改一些事情。
如果您不想重定向到 mail.php,请将其从表单的
action
属性中删除。由于您是通过 JavaScript 注入成功/失败消息,因此添加onsubmit="return false;"
以防止页面刷新。<form id="contact-form" method="post" action="" name="contact-form" role="form" onsubmit="return false;">
messages
我看不到HTML 中带有类名的 div 。
TA贡献1779条经验 获得超6个赞
添加
e.preventDefault()
内部
$('#contact-form').on('submit', function (e) { e.preventDefault(); // here
添加新的
<div>
内部<form>
标签:
<form id="contact-form" method="post" action="mail.php" name="contact-form" role="form" > <div class="messages"></div>
- 3 回答
- 0 关注
- 116 浏览
添加回答
举报