DS928 Ответов: 1

Половина функции работает


У меня есть функция, которая в сочетании с PHP отправляет электронное письмо. Так оно и есть. Чего id не делает, так это скрывает форму и говорит Спасибо.
<pre><script>
$(function() {
  $("#myform").on('submit', function(e) {
    e.preventDefault();
    $.ajax({
      url: 'send_mail.php',
      dataType: 'json',
      data: $("#myform").serialize()
    }).done(function(d) {
      if (d.success==true) {
        $("#myform").hide();
        $("#results").text("Thanks!").show();
      }
    });
  });
});
</script>>



<pre><?php

$webmaster_email = "ds@mediascrubber.com";
$email_address = $_REQUEST['email_address'] ;

function isInjected($str) {
	$injections = array('(\n+)',
	'(\r+)',
	'(\t+)',
	'(%0A+)',
	'(%0D+)',
	'(%08+)',
	'(%09+)'
	);
	$inject = join('|', $injections);
	$inject = '/$inject/i';
	if(preg_match($inject,$str)) {
		return true;
	}
	else {
		return false;
	}
}

if (!isset($_REQUEST['email_address'])) {
header( "Location: $feedback_page" );
}

elseif ( isInjected($email_address) ) {
header( "Location: $error_page" );
}

else {
mail( "$webmaster_email", "Feedback Form Results", "From: $email_address" );
header('Content-Type: application/json');
echo json_encode($data);

}
?>



Что я уже пробовал:

Я попробовал переместить JSON-код в PHP-часть.

Mohibur Rashid

попробуйте эту ссылку https://stackoverflow.com/questions/17267082/hide-form-after-submit-with-ajax

1 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

Поскольку почта уже отправлена, вы должны начать охоту за ошибками в части JavaScript, здесь:

.done(function(d) {
  if (d.success==true) {
    $("#myform").hide();
    $("#results").text("Thanks!").show();
  }
})


1. done вызывается только при успешном выполнении, у вас может быть ошибка с сервера, даже отправленная почта... Добавить тоже не получится!
2. Вы уверены, что D имеет свойство с именем 'успех' - отладка надо!