Проверка (проверка) отправки данных формы с помощью ajax

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

Я, я пытаюсь проверить (проверить) данные формы с помощью AJAX. Сначала я создаю функцию обратного вызова с помощью AJAX-запроса (в моем примере это время поля) Когда я нашел ту же запись в базе данных, мой ответ сервера NodeJS со значением false, это означает, что у нас есть запись, и нам не нужно добавлять вторую запись за это время).

Моя проблема в том, что форма все еще отправляется, независимо от ответа сервера.

вот мой код (интерфейс)

 function funABC(mdata,callback){
    console.log(mdata);
    $.ajax({
      url:'/dashboard/materials/checkshowrange',
      method: 'GET',      
      dataType: "json",
      contentType: "application/json",
      data:mdata,
      success: callback ,
     // error:callback,

    });
  }  


 $('.addForm').on('submit', function (event) {
    let form = $('.addForm');
    if (form[0].checkValidity() === false) {
      event.preventDefault();
      event.stopPropagation();
     // return false;
    }

event.preventDefault();
checkdata = {
        time_show : document.querySelector('.addForm').elements.time_show.value
      }
    functABC(checkdata,function(result) {     
      console.log(result); 
      if (result == 'true') {
        alert(`For time: ${checkdata. time_show} there is already an event, choose a different time`);        
        return false;
      } 
    })


form.addClass('was-validated');


some operations with form data, then send with ajax

$.ajax({
        type: "POST",
        url: "/dashboard/materials/add",
        dataType: "json",
        contentType: "application/json",
        success: function (data) {
          setTimeout(location.href = '/dashboard/materials', 10000);
        },
        data: JSON.stringify(formdata)
      });


});


  

Комментарии:

1. независимо от достоверности форм, вам необходимо предотвратить поведение события отправки формы по умолчанию. Я вижу, что вы делаете это при условии if. Вам нужно сделать это за пределами вашего funABC ()

2. Запомните строку, начинающуюся с » $(‘.AddForm’).on …». На самом деле, вам нужно поместить это за пределы функции ABC. Вам необходимо остановить поведение отправки формы по умолчанию.

3. @adp7 Я переместил весь код внутри функции с помощью обратного вызова, теперь, кажется, все работает нормально

Ответ №1:

Как и где вы вызвали этот post-запрос? Возможно, вам потребуется переместить post-запрос в обратный вызов

 function funABC(mdata, callback) {
    console.log(mdata);
    $.ajax({
        url: '/dashboard/materials/checkshowrange',
        method: 'GET',
        dataType: "json",
        contentType: "application/json",
        data: mdata,
        success: callback,
        // error:callback,

    });
}

$('.addForm').on('submit', function(event) {
    let form = $('.addForm');
    if (form[0].checkValidity() === false) {
        event.preventDefault();
        event.stopPropagation();
        // return false;
    }

    event.preventDefault();
    checkdata = {
        time_show: document.querySelector('.addForm').elements.time_show.value
    }
    functABC(checkdata, function(result) {
        console.log(result);
        if (result == 'true') {
            alert(`For time: ${checkdata. time_show} there is already an event, choose a different time`);
            return false;
        } else {
            $.ajax({
                type: "POST",
                url: "/dashboard/materials/add",
                dataType: "json",
                contentType: "application/json",
                success: function(data) {
                    setTimeout(location.href = '/dashboard/materials', 10000);
                },
                data: JSON.stringify(formdata)
            });
        }
    })


    form.addClass('was-validated');

});
  

Или вы можете асинхронно использовать false для запроса проверки

 $.ajax({
    url: '/dashboard/materials/checkshowrange',
    method: 'GET',
    dataType: "json",
    contentType: "application/json",
    data: mdata,
    success: callback,
    async: false,
    // error:callback,

});
  

Комментарии:

1. Спасибо, чувак, я переместил весь код вставки в функцию обратного вызова почти как в твоем примере. теперь, кажется, все работает нормально. Что, если мне нужно проверить не одно значение, могу ли я использовать promise?

2. не понял, не могли бы вы прислать мне пример?