我在下面的示例表单中,beforeSend
函数显示正在发送的消息,一旦发送,其他函数称为.done(function (data)
,显示消息已发送。我想做的就是使用另一个没有发送消息的功能来显示消息"错误,消息没有发送"
var form = $('#main-contact-form');
form.submit(function (event) {
$.ajax({
type: 'POST',
url: '../sendemail.php',
data: {
Name: name,
Subject: $form.find("input[name='subject']").val(),
Email: email,
message: $form.find("textarea[name=message]").val(),
},
beforeSend: function () {
// message is sending...
}
}) //end ajax
.done(function (data) {
// message sent!
});
});//end contact form
答案 0 :(得分:1)
//1.
$.ajax({
type: 'POST',
url: '../sendemail.php',
data: {
Name: name,
Subject: $form.find("input[name='subject']").val(),
Email: email,
message: $form.find("textarea[name=message]").val(),
},
beforeSend: function () {
// message is sending...
}
}) //end ajax
.done(function (data) {
// message sent!
})
.fail(function(){
//handle error here
});
// 2。
constObj.success(function(data){
});
constObj.error(function(error){
});
答案 1 :(得分:1)
而不是.done
使用ajax选项success
和error
。发送电子邮件失败时在服务器上抛出错误。
$.ajax({
success: function () {
// message sent!
},
error: function () {
// message sent failed!
}
});
在服务器端:
if ($this->sendMessage()) {
echo "ok";
} else {
throw new Exception('Email failed to send.', 500);
}
你无法判断用户是否真的收到了电子邮件(我想有一些复杂的方法可以解决这个问题。)
答案 2 :(得分:0)
你使用done(),它是在一个成功的ajax请求(通常返回HTTP 200)之后执行的。如果您阅读http://api.jquery.com/jquery.ajax/,则会失败(),这是在失败的ajax请求之后执行的。
它还取决于sendemail.php的输出。如果错误时PHP返回HTTP 200以外的其他方法,则可以使用fail()promise方法,例如......
$.ajax({
beforeSend: function() {
$('msg').text('Sending email...');
}
}).done(function() {
$('#msg').text('Success!');
}).fail(function() {
$('#msg').text('Failed!');
});
但是,如果您的PHP在错误时也返回HTTP 200,您可以执行以下操作...
PHP:
$response = array(
'status' => null,
'error' => null
);
if ($mailer->send()) {
$response['status'] = true;
} else {
$response['status'] = false;
$response['error'] = 'Unable to send email';
}
jQuery的:
$.ajax({
beforeSend: function() {
$('msg').text('Sending email...');
}
}).done(function(data) {
if (data.status === true) {
$('#msg').text('Success!');
} else {
$('#msg').text('Failed: ' + data.error);
}
});