Сообщения об ошибках, когда контактная форма AJAX не публикуется

У меня есть несколько контактных форм, использующих один и тот же общий код AJAX:

$(document).ready(function() {
    $('#mainMail').submit( function() {
        $.ajax({
            type: "POST",

            url : "<?php echo home_url(); ?>/wp-content/themes/retlehs-roots-f45f4f5/assets/bin/process.php",
            data: $(this).serialize(),
            success: function() {
                    $('#enquiryBox #submitSuccess').removeClass('hidden');
                    setTimeout(function() { $("#enquiryBox #submitSuccess").addClass('hidden'); }, 15000);       
                },
            error: function() {
                $('#enquiryBox #submitFail').removeClass('hidden');
                setTimeout(function() { $("#enquiryBox #submitFail").addClass('hidden'); }, 15000);
            }
            });
        return false;
    });
});

Короче говоря, когда он успешно отправляет форму и отправляет мне электронное письмо (через process.php), #submitSuccess div ДЕЙСТВИТЕЛЬНО отображается так, как должен. Проблема в том, что при сбое также появляется div (div #submitFail остается скрытым).

Я предполагаю, что это связано с тем, что сбой публикации ajax произойдет только в том случае, если process.php не будет успешно вызван? Есть ли способ настроить это так, чтобы, если электронное письмо не было отправлено мне через process.php, пользователь получил сообщение об ошибке?

Вот мой код process.php:

<?php 

$robotest = $_POST['robotest']; //just testin' for robots

$recipient = "[email protected]"; //recipient 
$email = ($_POST['email']); //senders e-mail adress 

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == "")) { 

$Name = ($_POST['name']); //senders name 

$mail_body  = "Hello, \r\n \r\n";
$mail_body .= "You have received a new booking with the following details: \r\n\r\n";
$mail_body .= "{$_POST['comments']}; \r\n \r\n";
$mail_body .= "Please respond to the customer within 30 minutes on the following phone number: {$_POST['phone']} \r\n";
$mail_body .= "Warm regards, \r\n";
$mail_body .= "Robot. \r\n";



$subject = "Free Consult Inquiry"; //subject 
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields 

mail($recipient, $subject, $mail_body, $header); //mail command :) 

} else {
  print "You've entered an invalid email address!";
 }
?>

(print "you've entered an invalid email address!"было моей попыткой сообщения об ошибке, но это тоже не работает...)


person JVG    schedule 12.11.2012    source источник


Ответы (3)


Вы можете указать на ошибку, вернув код ошибки HTTP, например.

} else {
  header("HTTP/1.1 500 Internal error");
  print "You've entered an invalid email address!";
 }
person Barmar    schedule 12.11.2012

Добавьте эту строку $("#enquiryBox #submitSuccess").addClass('hidden'); в блок ошибок,

  $.ajax({
        type: "POST",

        url : "<?php echo home_url(); ?>/wp-content/themes/retlehs-roots-f45f4f5/assets/bin/process.php",
        data: $(this).serialize(),
        success: function() {
                $('#enquiryBox #submitSuccess').removeClass('hidden');
                setTimeout(function() { $("#enquiryBox #submitSuccess").addClass('hidden'); }, 15000);       
            },
        error: function() {
            $('#enquiryBox #submitFail').removeClass('hidden'); //why do you remove class 'hidden' and add it later too ??
            $("#enquiryBox #submitSuccess").addClass('hidden'); //added line here
            setTimeout(function() { $("#enquiryBox #submitFail").addClass('hidden'); }, 15000);
        }
        });
person Teena Thomas    schedule 12.11.2012

Если вы прочитаете запись вручную по jQuery.ajax(), вы обнаружите, что ошибка событие возникает при возникновении ошибки протокола или сети. Если ваш скрипт возвращает false, null или что-то в этом роде, он по-прежнему считается допустимым ответом, отсюда и ваша проблема.

В таком случае я бы написал его так, чтобы все вызовы в конечном итоге вызывали один метод, а если вызывается событие ошибки, он вызывал бы тот же метод с перестроенным сообщением об ошибке.

person Christian    schedule 12.11.2012