未发送电子邮件时显示错误

时间:2017-01-03 08:43:14

标签: javascript jquery ajax

我在下面的示例表单中,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

3 个答案:

答案 0 :(得分:1)

  1. 您可以使用fail api来处理错误,如下所示。
  2. 另外,在$ .ajax({constObj})中你可以有成功和错误的apis来处理相同的事情。
  3. 参见 here for more info

    //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选项successerror。发送电子邮件失败时在服务器上抛出错误。

$.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);
    }
});