Sweetalert (Ajx - PHP Form) показывает только успех (предупреждение), даже если поля ввода пусты

Я пробовал разные способы сделать эту работу, но не повезло. Каждый раз, когда я отправляю форму, предупреждение об успешном проглатывании срабатывает даже на пустых полях.

Это мой HTML

<!-- Content -->
<div class = "content">
    <form role = "form" id = "form" action = "assets/php/mail.php" method = "post">

        <div class = "row 50%">
            <div class = "6u 12u(mobile)">
                <label for = "name"></label>
                <input id = "name" type = "text" name = "name" placeholder = "Name"/>
                <span></span>
            </div>
            <div class = "6u 12u(mobile)">
                <label for = "email"></label>
                <input id = "email" type = "email" name = "email" placeholder = "Email"/>
            </div>
        </div>

        <div class = "row 50%">
            <div class = "12u">
                <textarea id = "message" name = "message" placeholder = "Message" rows = "7"></textarea>
            </div>
        </div>

        <div class = "row">
            <div class = "12u">
                <ul class = "buttons">
                    <li><input id = "submit-button" type = "submit" class = "special" value = "Send" /></li>
                </ul>
            </div>
        </div>

    </form>
</div>

Это JS. Пустая ласточка I. Я использую ее для очистки формы после отправки - единственный способ заставить ее работать.

$(document).ready(function(){
$('#form').on('submit',function(e) {  //Don't foget to change the id form
$.ajax({
  url:'assets/php/mail.php', //===PHP file name====
  data:$(this).serialize(),
  type:'POST',
  success:function(data){
    console.info(data);
    //Success Message == 'Title', 'Message body', Last one leave as it is
    swal({
      type: 'success',
      title: 'Submmited',
      text: 'Your message has been send!'
    }).then((result) => {
        if (result.value) {
          $("#name").val("");
            $("#email").val("");
            $("#message").val("");
          swal()
         }
      });
  },
  error:function(data){
    //Error Message == 'Title', 'Message body', Last one leave as it is
    swal({
      type: 'error',
      title: 'Oops...',
      text: 'Something went wrong!',
      footer: '<a href>Why do I have this issue?</a>'
    })
  }
});

e.preventDefault(); //This is to Avoid Page Refresh and Fire the Event "Click"

});
});

Это мой PHP. Я использую для этого так много разных PHP-кодов, но именно он работает лучше всего для меня.

$name = strip_tags(trim($_POST["name"]));
$name = str_replace(array("\r","\n"),array(" "," "),$name);
$email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
$message = trim($_POST["message"]);

// Check the data.
if (empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: ../../contact.html");
    exit;
}

$recipient = "[email protected]";

// Set the email subject.
$subject = "New contact from $name";

// Build the email content.
$email_content = "Name: $name\n";
$email_content .= "Email: $email\n\n";
$email_content .= "Message:\n$message\n";


$email_headers = "From: $name <$email>";

mail($recipient, $subject, $email_content, $email_headers);

header("Location: ../../contact.html");

Ваше перенаправление на contact.html в PHP остается неизменным. Каким образом внешний интерфейс должен знать, что поля пусты?

Devon 01.07.2018 20:07

Значит, мне нужно перенаправить на другую страницу?

user9997446 01.07.2018 20:17

Нет, но вы должны каким-то образом отличать успех от неудачи. Как вы ожидаете, что это сработает, если вы одинаково отреагируете на оба?

Devon 01.07.2018 20:20

Я пытаюсь перенаправить на индекс, но все равно делаю то же самое.

user9997446 01.07.2018 20:20

Простите мое невежество, я в этом полный нуб.

user9997446 01.07.2018 20:21

Похоже, вам нужно потратить больше времени на изучение того, как эти вещи работают, а не на копирование и вставку кода.

Devon 01.07.2018 20:22

Спасибо, я думаю, я пришел не в то место в поисках помощи

user9997446 01.07.2018 20:31

Правильное место для помощи по конкретным проблемам, но вам нужно лучше понимать, что вы делаете, чтобы помощь была добавленной стоимости. Лучшее место для новичков - школа или дискуссионные форумы, а не сайт вопросов и ответов.

Devon 01.07.2018 21:10

Вы должны проверить, являются ли входы пустыми или нет в обработчике submit, перед ajax. Обратный вызов success срабатывает при успешном повторном запросе ajax независимо от отправленных данных. Обратный вызов error срабатывает, когда запрос ajax не может быть завершен ... Например, из-за неправильного URL-адреса или чего-то еще.

Louys Patrice Bessette 01.07.2018 21:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
663
1

Ответы 1

Попробуйте проверить входы в обработчике submit:

$('#form').on('submit',function(e) {
  e.preventDefault();
  if ( $(this).find("[name='name']").val()! = "" &&  // If the 3 aren't empty, it proceeds.
      $(this).find("[name='email']").val()! = "" &&
      $(this).find("[name='message']").text()! = ""
  ){
    // The rest of your code here... 

  }else{
    alert("Please fill the form before submitting!");  // Or use a swal...
  }
});

Об Ajax: обратный вызов success срабатывает при успешном повторном запросе Ajax независимо от отправленных данных. Обратный вызов error срабатывает, когда запрос Ajax не может быть завершен ... Например, из-за неправильного URL-адреса или чего-то еще.

Другие вопросы по теме