#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. не понял, не могли бы вы прислать мне пример?