0

Добрый день. Есть функция которая загружает данные с помощью Аякс запрос к базе данные по 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');

1 Answers1

-2

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

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

async: false,

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

KAGG Design
  • 35,238
  • 1
    хоть и не самый лучший == за рекомендацию таких способов в приличном обществе бьют по шапке) – Утка Учится Укрываться Mar 07 '17 at 06:03
  • Спасибо, но соглашусь с прошлым комментатором, этот вариант совершенно не подходит. – Максим147 Mar 07 '17 at 06:38
  • @УткаУчитсяУму по шапке можно и в ответ получить. Приличным называется то общество, где не ехидничают, а дают лучшие ответы, разъясняя (не мне, я и без вас все знаю), почему предложенный ответ плох и какие у него подводные камни. Учитывая уровень подготовки пользователя (по вопросу видно, что он вообще не догадывался ни о какой асинхронности) я предложил самое простое решение. – KAGG Design Mar 07 '17 at 08:51
  • @Максим147 интересно было бы услышать, почему. Вот почему - совершенно ) – KAGG Design Mar 07 '17 at 08:53
  • @KAGGDesign, самое простое и в общем случае явно вредное решение. – Утка Учится Укрываться Mar 07 '17 at 09:13
  • @УткаУчитсяУму уровень дискуссии mail.ru – KAGG Design Mar 07 '17 at 09:14
  • @KAGGDesign в смысле дискуссии? Вы предлагаете явно вредное решение не говоря чо том что оно вредное достаточно ясно. Я не хочу никому ничего доказывать, я хочу чтобы тот кто мимо проходил не использовал его а поискал еще. – Утка Учится Укрываться Mar 07 '17 at 09:15
  • @УткаУчитсяУму явно вредное оно только в вашей голове, более нигде. Было бы тотально вредным - не поддерживалось бы до сих пор. – KAGG Design Mar 07 '17 at 09:18
  • @KAGGDesign, нет, не только. Это deprecated фича. Вы же понимаете почему deprecated фичи использовать плохо, да? (это уж не говоря о том что Вы толкаете автора вопроса с нормального пути на костыльно-хренаторский) – Утка Учится Укрываться Mar 07 '17 at 09:23
  • @УткаУчитсяУму я ждал этого ) вы фразу в мануале до конца прочитайте, переведите в ней слово with, а потом уж делайте заявления – KAGG Design Mar 07 '17 at 09:25
  • @KAGGDesign, я то перевел и понял, а вот Вы кажется нет. Намекаю, задепрекейтить синхронный xhr придумали не в jQuery, источник другой) Загляните в него, там много интересного – Утка Учится Укрываться Mar 07 '17 at 09:35