2016-02-04 3 views
1

Возникли проблемы с моей формой Mail, HTML кажется прекрасным, часть jQuery тоже и PHP тоже правильны. У части, с которой я столкнулся, заключается в том, что jQuery не может уловить ответ об ошибке из скрипта PHP. Он должен загрузить данные из ответа и поместить его в класс, но ничего не происходит, но я вижу ответ в консоли.Простая PHP-форма электронной почты jQuery

вот JQuery:

jQuery.ajax({ 
     url: "send_email.php", 
     data:'name='+emailData.name+'&email='+ 
     emailData.email+'&subject='+ 
     'Hello'+'&body='+ 
     emailData.body, 
     type: "POST", 
     success:function(data){ 
      $("#contactForm .status").html(data); 
     }, 
     error:function(data){ 
      $('#modal .modal-body').html(data);  
     } 
    }); 

и PHP скрипт:

$toEmail = "[email protected]_samples.com"; 
$mailHeaders = "From: " . $_POST["name"] . "<". $_POST["email"] .">\r\n"; 
if(mail($toEmail, $_POST["subject"], $_POST["body"], $mailHeaders)) { 
    print "<p class='success'>Mail Sent.</p>"; 
} else { 
    print "<p class='error'>Problem in Sending Mail.</p>"; 
} 

Таким образом, любые идеи, почему я не могу уловить реакцию на ошибку? стр. Я включил только необходимые биты кода.

+2

'error' запускается, если есть фактическая ошибка HTTP. То есть ошибка сервера 500 или 404 или что-то в этом роде. Однако вы возвращаете данные, если PHP 'mail()' происходит с ошибкой. 'ajax' рассматривает его как успешный вызов. –

+0

В дополнение к комментариям других пользователей, я бы сказал, что вы нарушаете какой-то спам-фильтр. '$ _POST ['email']' должен быть из того же домена, отправляющего почту. В противном случае вы должны передать '$ _POST ['email']' в качестве заголовка Reply-To. Таким образом, вы можете получить ложный позитив на 'mail()', но сервер по-прежнему не может отправить, или почта никогда не приходит, потому что клиент отклонил ее. –

ответ

1

Оба ответа будут захваченной в success обработчика. Обработчик error предназначен для тех случаев, когда код ответа HTTP не равен 200 и т. Д. (Например, 4xx, 5xx). Если вы хотите, чтобы вызвать обработчик ошибок, используйте

} else { 
    header('500 Problem'); 
    print "<p class='error'>...</p>"; 
} 

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

+0

Это он. :) Большое спасибо – Aca85

0

Для того чтобы интерпретироваться как ошибку, необходимо иметь реальную проблемную серверную сторону. Когда метод электронной почты не сможет отправить электронное письмо, он вернет false, но запрос все равно работает нормально, поэтому он всегда будет возвращаться по вашему методу успеха. Ошибка внутреннего сервера, чтобы вернуть код методу ошибки. Вы можете выбросить исключение или что-то в этом роде (я не знаю, может ли php это сделать), чтобы код возвращался при методе ошибки.

Другой подход может вернуть код состояния. Скажем

Status 0-> Email sent 
Status 1-> Email not sent 

И убедитесь, что статус в вашем методе успеха и выбрать то, что текст, чтобы показать пользователю

1

почта функция PHP является нечетным,

из main page for mail():

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

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


В принципе нет ничего, что вы на самом деле можно сделать в простом ола»PHP, если вы фактически проверить провод, чтобы увидеть, что происходит.Я бы предложил использовать некоторую почтовую библиотеку, которая имеет некоторые признаки того, отправлена ​​ли почта или нет (если она существует)

Смежные вопросы