Цикл PHP mail()
работает и отправляется правильно, без ошибок. Однако мой jQuery не работает, чтобы уведомить об успешном завершении или сообщении об ошибке на лицевой стороне.Функция PHP mail() не уведомляет jQuery об успехе/неудаче
PHP:
add_action('wp_ajax_invfr_process_ajax', 'invfr_sendmail');
add_action('wp_ajax_nopriv_invfr_process_ajax', 'invfr_sendmail');
function invfr_sendmail() {
$post = (!empty($_POST)) ? true : false;
if($post) {
$subject = invfr_get_settings('subject');
$message = invfr_get_settings('message');
$friends = $_POST['friend_email'];
$errors = array();
foreach ($friends as $key => $friend) {
$name = stripslashes($_POST['friend_name'][$key]);
$email = trim($_POST['friend_email'][$key]);
// Check name
if(!$name)
$errors[] = '#friend_name-' . $key;
if(!$email)
$errors[] = '#friend_email-' . $key;
if($email && !is_email($email))
$errors[] = '#friend_email-' . $key;
}
// send email
if(!$errors) {
foreach ($friends as $key => $friend)
$mail = wp_mail($email, invfr_tokens_replacement($subject, $_POST, $key), invfr_tokens_replacement($message, $_POST, $key));
if($mail)
echo 'sent';
}
else
echo json_encode($errors);
}
}
JQuery:
<script type="text/javascript">
var jQuery = jQuery.noConflict();
jQuery(window).load(function(){
jQuery('#invfr_form').submit(function() {
// change visual indicators
jQuery('td').removeClass('error');
jQuery('.loading').show();
jQuery('.submit input').attr('disabled', 'disabled');
// validate and process form here
var str = jQuery(this).serialize();
jQuery.ajax({
type: 'POST',
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: str,
success: function(msg) {
jQuery('#invfr_note').ajaxComplete(function(event, request, settings) {
msg = msg.replace(/(\s+)?.$/, "");
if(msg == 'sent') {
result = '<div class="updated"><p><?php _e('Your invitation has been sent! Send another?', 'invfr'); ?></p></div>';
jQuery('#invfr_form input[type=text], #invfr_form input[type=email]').val('');
} else {
//loop through the error items to indicate which fields have errors
msg = msg.replace(/[\[\]']+/g,'');
msg = msg.split(',');
jQuery.each(msg, function (i, id) {
id = id.replace(/["']{1}/g, '');
jQuery(id).parent('td').addClass('error');
});
result = '<div class="error"><p><?php _e('<strong>ERROR:</strong> Check your form for the errors which are highlighted below.', 'invfr'); ?></p></div>';
//result = msg;
msg = '';
}
jQuery(this).html(result);
// visual indicators
jQuery('.loading').hide();
jQuery('.submit input').removeAttr('disabled');
});
}
});
return false;
});
});
</script>
Спасибо за любую помощь!
Вы уверены, что это не будет ошибка обратного вызова, которую вы не слушаете? Почему вы используете ajaxComplete INSIDE для успеха ajax? –
Потому что я не хороший программист? Это мой лучший ответ. Я трясу эту вещь как 3 часа и не могу получить чертовски загрузочный гиф, чтобы перестать вращаться и дать мне успешное предупреждение. –
Добавьте обратный вызов ошибки, аналогичный вашему обратному вызову. 'error: function() {console.log (arguments)}' –