Записать переменную полученную через callback [дубликат]

92
05 мая 2021, 03:30
На этот вопрос уже даны ответы здесь:
Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания (3 ответа)
Закрыт 1 год назад.

Как получить данные из response в переменную res?

$(document).ready(function(){ 
    $("body").on('submit', '#forma', function(e) { 
    e.preventDefault();     
    var $that = $(this); 
    formData = new FormData($that.get(0)); 
    var table = $('input[name="table"]').val(); 
     
    console.log(table); 
    var editor = tinyMCE.EditorManager.get('textArea'); 
    if(editor){ 
        formData.set('save_arr[text]', editor.getContent()); 
    } 
    var NewArr = { 
        id: $('input[name="napravlenie_id"]:enabled').map(function(){return $(this).val();}).get(), 
        table: $('input[name="napravlenie_table"]:enabled').map(function(){return $(this).val();}).get(), 
        name: $('input[name="napravlenie_name"]:enabled').map(function(){return $(this).val();}).get(), 
        price: $('input[name="napravlenie_price"]:enabled').map(function(){return $(this).val();}).get(), 
        map: $('input[name="napravlenie_map"]:enabled').map(function(){return $(this).val();}).get() 
    }; 
    if (NewArr['id'].length != 0) { 
        SaveData(NewArr); 
    } 
     
    var res; 
    SendSaveForma(function(response){ 
        res = response; console.log(response) 
    },$that, formData, table); 
 
    console.log(res) 
  }); 
}); 
 
 
function SendSaveForma(callback, $that, formData, table) {  
    $.ajax({ 
        url: $that.attr('action'), 
        type: $that.attr('method'), 
        contentType: false, 
        processData: false, 
        data: formData, 
        dataType: 'json', 
        success: function(res){ 
            var response = 'tttttttttttt'; 
            callback(response); 
        } 
    }); 
}   

Answer 1

Попробуйте так:

var res;
SendSaveForma(function(response){
    res = response;
    console.log("RESPONSE " + response);
    console.log("RES " +res);
    // И здесь же обработка
},$that, formData, table);

Либо использовать промисы или переходить на async/await.

Answer 2

@Streletz, спасибо. Я одной формой отправляю разные данные в разные таблицы. И мне надо быть уверенным что в первую таблицу данные записались. Получаю id строки и записываю остальные данные в другую таблицу parent_id = id. Перенес SaveData(NewArr) в SendSaveForma. Не знаю на сколько это верно, но мои познания jquery нулевые.

SendSaveForma(function(response){
    if (NewArr['id'].length != 0 && response != 0) {
        SaveData(NewArr, response);
    }
},$that, formData, table);


function SaveData(NewArr, parent_id){
$('.loud_save').css({'display': 'block'});
$.ajax({
    url: "./",
    type: "POST",
    data: {DatanewForm: NewArr},
    success: function(res){
        console.log(parent_id)
    }
});
};
READ ALSO
Как взять число у определенного input

Как взять число у определенного input

У меня есть каталог, в каталоге есть кнопка , в кнопке есть input и две кнопки которые увеличивают значения и уменьшают значение в inputНо input ов может...

83
Браузер не может найти картинку, переданную в тег

Браузер не может найти картинку, переданную в тег

передаю картинку из БД в шаблон, но браузер её почему-то не находитОбъясните пожалуйста почему и как это решить

94
Почему съезжает блок меню?

Почему съезжает блок меню?

Меню состоит из двух блоков header__left и header__right, они должны находиться в одной линии, Но блок header_right съезжает внизКак можно это исправить?

159
Как связать checkbox и select

Как связать checkbox и select

Есть элемент select, рядом с ним стоит чекбокс (<input type='checkbox'>) select по умолчанию находится в состоянии disabled, мне надо что бы при нажатии на чекбокс...

117