Показать сообщение отдельно
  #5 (permalink)  
Старый 19.08.2021, 13:57
Новичок на форуме
Отправить личное сообщение для zloy_ej Посмотреть профиль Найти все сообщения от zloy_ej
 
Регистрация: 18.08.2021
Сообщений: 4

Немного переделал код, получилось вот так:
'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 отличается от второго, затык именно в этой функции, но найти его я не могу (
Ответить с цитированием