-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); } }); }

2 Answers2

1

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

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

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

Streletz
  • 11,734
  • не получается, возвращает undefined. – Александр Jul 29 '19 at 10:57
  • Если response равно undefined, то почему res должна иметь другое значение? Проверяйте есть ли ответ о того запроса, что Вы отправляете в функции. – Streletz Jul 29 '19 at 11:00
  • Проверяю, в console.log(response) - я получаю значение, в res undefined – Александр Jul 29 '19 at 11:08
  • Я передаю строку - console.log(response) выводит текст строки – Александр Jul 29 '19 at 11:10
  • Если Вы пр прежнему присваиваете определяете res после вызова функции и присваиваете значение вне callback, то это не удивительно. var в success Вас не спасёт, т.к. он далеко не всегда делает переменную глобальной. – Streletz Jul 29 '19 at 11:21
  • Как проверяете res? Код в студию! – Streletz Jul 29 '19 at 11:22
  • res проверяю через console.log(res). – Александр Jul 29 '19 at 11:26
  • Где конкретно Вы его вызываете? Приведите пожалуйста полный код примера в вопросе. – Streletz Jul 29 '19 at 11:28
  • указал полный код примера. в console.log(response) получаю значение tttttttttttt, в console.log(res) получаю значение undefined – Александр Jul 29 '19 at 11:34
  • Посмотрел. Вы выводите res вне асинхронного запроса. Поэтому у Вас и undefined. Запрос и присвоение значения просто не успевает отработать к моменту вывода. Либо переносите логику обработки в callback либо промисы или async/await/ – Streletz Jul 29 '19 at 12:01
0

@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)
    }
});
};