Немного переделал код, получилось вот так:
'use strict';
var btn = document.querySelector('.form_submit');
function AJAX() {
return new Promise(function(resolve, reject){
$.ajax({
type: "POST",
url: "/get_building",
data: $('form').serialize(),
type: 'POST',
success: function(response) {
console.log(`Это response ${response}`);
var json = jQuery.parseJSON(response); //Прочитать ответ сервера
var resp_list = json.resp; //массив с ключем par_buld_resp (из функции get_building main.py)
console.log(`Это resp_list ${resp_list}`);
resolve(resp_list);
},
error: function(error) {
console.log(`Это error в AJAX ${error.name}`);
reject(error);
}
});
})
}
async function checkForm() {
var title = $('.add_building_form').val();
if (title == '') {
return "No"
}
try {
let promise = await AJAX();
console.log(`это промис ${promise}`);
console.log(`это title ${title}`);
if (promise == 'Old') {
return "No"
}
else return "Yes";
} catch (error) {
console.log(`Error ${error}`);
}
return("No");
}
btn.addEventListener('click', async function() {
const answer = await checkForm();
console.log(`Это answer ${answer}`);
if (answer == "No") {
return false;
}
else {
return btn.submit();
}
});
При вводе пустой строки, как и полагается запрос ловится еще в функции checkForm с выводом в консоль:
Это answer No
При вводе каких либо значений, затык происходит в функции AJAX со следующим логом:
Это error в AJAX undefined
Error [object Object]
Это answer No
причем на сервере (Flask) обращения не приходит.
Если использовать старый код:
$(document).ready(function(){
var btn = $('.form_submit');
btn.click(function(){
var answer = AJAX();
var title = $('.add_building_form').val();
if(title==''){
return false;
}
else
return false;
//{form.submit();}
})
})
function AJAX() {
$.ajax({
type: "POST",
url: "/get_building",
data: $('form').serialize(),
type: 'POST',
success: function(response) {
var json = jQuery.parseJSON(response); //Прочитать ответ сервера
var resp_list = json.resp; //массив с ключем par_buld_resp (из функции get_building main.py)
console.log(resp_list);
return resp_list;
},
error: function(error) {
console.log(error);
return error;
}
});
}
ответ приходит, AJAX отрабатывает, resp_list в зависимости от того, что ввел получает значение New или Old. Но так как асинхронность не прописана, анонимная функция, вызывающая AJAX() получает undefined (оно понятно, так как анонимная выполняется дальше а значение в ответе еще не определено).
Не могу понять, чем первый AJAX отличается от второго, затык именно в этой функции, но найти его я не могу (