дожидаться выполнения Ajax [дубликат]

324
07 марта 2017, 16:31

На данный вопрос уже ответили:

  • Как вернуть значение из события или из функции обратного вызова? 2 ответа

Добрый день. Есть функция которая загружает данные с помощью Аякс запрос к базе данные по Id пользователя

function getDialogToId(idVk){
    var pageRez='0'; 
    $.ajax({
        url: 'http://site.ru/ajax/ids.php',
        type: 'POST',
        data: 'func=getDialogToId'  + '&idVk=' + idVk,                     
        dataType: 'json',                       
    }).done(function(rez) {                    
        pageRez =  rez.page;
    }).fail(function() {    
        alert('ОШИБКА, что-то не так');
    }); 
    return pageRez;
}

Но проблема в том, что как только я вызываю ее в цикле, переменные приходят undefined , подскажите в чем дело? почему функция не дожидается результата , который должен прийти в Аякс запросе, а сразу выдает не определенную переменную? и как это можно исправить? Спасибо.

вот код вызова:

getDialogToId('5093649');
Answer 1

Ajax выполняется асинхронно по умолчанию, т.е. ваш код продолжает выполняться, возвращает undefined и только много позже завершается выполнение ajax-запроса с присваиванием результата.

Самый простой (хоть и не самый лучший способ) - добавьте

async: false,

в ajax-запрос. Браузер выдаст предупреждение, но код будет работать так, как вы ожидаете.

READ ALSO
Yii2 ActiveForm submit

Yii2 ActiveForm submit

У меня есть 2 формы одна обычная

514
Вызов JS функции из WebView выдаёт ошибку “function is not defined”

Вызов JS функции из WebView выдаёт ошибку “function is not defined”

При попытке вызвать функцию MyApp_HighlightAllOccurencesOfString() из WebView

303
Как перевести таск из Grunt в Gulp?

Как перевести таск из Grunt в Gulp?

Всем приветЕсть таск для гранта, может кто помочь перевести его в таск для галпа? Чтобы синтаксис был верен

363