Правильно, тут алерт живет своей жизнью и с самим скриптом ничего общего не имеет.
Про отлов ошибок в $.post читаем в доке
api.jquery.com/jquery.post
Я обычно делаю отправку через $.ajax и исключительно с ответом статуса сервера обрабатываю данные для более тонкой ловли ошибок.
Писал на коленке и PHP не затрагивал!
Пример HTML формы
<form id="form">
<input type="text" name="phone" value="телефон">
<input type="text" name="name" value="Имя">
<button type="submit" class="btn">
Отправить данные
</button>
</form>
Обработчик формы
(function($) {
// Обработка формы
$('#form').on('click', '.btn', function() {
var $btn = $(this);
var $data = $btn.serialize();
console.log($data); // В консоле браузера смотрим что содержит переменная $data после нажатия на кнопку "Отправить данные"
$.ajax({
"url": '/mail.php',
"method": "POST",
"data": $data,
beforeSend: function() { // Изменим состояние кнопочки button
$btn
.prop('disabled', true)
.text('Данные отправляются....');
},
statusCode: { // При статусе 200, скрипт на сервере (PHP) отработал всё должным образом
200: function() {
$btn
.text('Сообщение успешно отправлено.');
// Нужно узнать в phpinfo включена ли функция mail(), т.е. данное сообщение придет даже если почта не отправилась, поэтому необходимо колупаться в PHP и делать соответствующие проверки
},
403: function(err) { // Если на стороне PHP какие то проблемы, нужно отдать заголовок 403 и тогда сообщение с ошибкой вылетит в алерте
alert(JSON.stringify(err));
// Изменим статус кнопочки
$btn
.prop('disabled', false)
.text('Попробовать вновь?');
},
404: function() { // Лишняя проверка, но в данном случаем временно можно проверить достук к файлу
alert('Файл mail.php вернул заголовок 404, файл не найден!');
}
}
});
});
}(jQuery));
На сервере в PHP делаем различные проверки на заполненность полей phone, name. Если они отсутствуют отдаем заголовок сервером 403 и сообщение об ошибке. Далее отправляем почту по mail(), автоматом должен придти заголовок 200 и кнопочка формы поменяет текст.