JQuery AJAX возвращает true, но не отображать правильное сообщение в PHP - PullRequest
1 голос
/ 05 ноября 2019

У меня есть следующий код, пишущий в ajax, который отправил запрос на сервер

$.ajax({
      type: "POST",
      url: action,
      data: str,
      success: function(msg) {
        //alert(msg);

        if (msg == 'sent') {
            alert("success");
          $('#errormessage').html('<div class="alert alert-success">Email sent successfully.</div>');
          $('.contactForm').find("input, textarea").val("");
        }else if (msg == 'saved') {
          $("#sendmessage").removeClass("show");
          $("#errormessage").addClass("show");
          $('#errormessage').html('<div class="alert alert-warning">Email couldn\'t be sent but not too worry we got it in our database. We will get back to you.</div>');
          $('.contactForm').find("input, textarea").val("");
        }

         else {
          $("#sendmessage").removeClass("show");
          $("#errormessage").addClass("show");
          $('#errormessage').html(msg);
        }

      }
    });

php код

$to_email = $set['Email'];

$headers = "From: ". $email;

//check if the email address is invalid $secure_check
$secure_check = sanitize_my_email($email);
if ($secure_check == false) {
    echo "Invalid input";
} else { //send email 
$query = mysqli_query($mysqli,"INSERT INTO emails(name,email,subject,message)VALUES('$name','$email','$sub','$msg')");
$mail = mail($to_email,$sub,$msg,$headers);

if($query and $mail){
    echo 'sent';
}else if($query and  !$mail){
    echo 'saved';
}else{
    echo $mysqli->error;
}

}

Если я отправлюэлектронная почта успешно выполнена с вставкой. Проблема, с которой я сталкиваюсь, заключается в том, что ajax не распечатывает правильное сообщение. Он выполняет только часть else , которая отображает отправлено

Эта часть кода не ожидается:

if (msg == 'sent') {
        alert("success");
      $('#errormessage').html('<div class="alert alert-success">Email sent successfully.   
       </div>');
      $('.contactForm').find("input, textarea").val("");
       }

Вместо этого она отображаетсяпросто отправлено сообщение

else {
          $("#sendmessage").removeClass("show");
          $("#errormessage").addClass("show");
          $('#errormessage').html(msg);
        }

1 Ответ

0 голосов
/ 05 ноября 2019

Скорее всего, проблема связана с тем, что вы возвращаете текстовый ответ, и вокруг значения есть пробел, поэтому msg == 'sent' никогда не соответствует действительности.

Чтобы это исправить, вы можете просто позвонить trim() вудалите пробел:

if (msg.trim() == 'sent') {
  // your code...
}

В качестве альтернативы вы можете изменить свой PHP, чтобы он возвращал сериализованную структуру данных, такую ​​как JSON или XML, чтобы избежать этой проблемы. Я бы предложил сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...