Почему код выполняется раньше функции?

Всем привет! Пытаюсь сделать слайдер изображений. Каждое изображение перед выводом, получаем с сервера.

function LImage(post_data){
   var data = GetImageData(post_data); // функция просто получает данные с сервера

   // строка ниже отрабатывается раньше, чем данные записываются в data.
   $('.modal__image')
      .animate({opacity: 0.3})
      .attr('src', data.data.content.this_image.url)
      .load(function(e){
         $('.modal__image').stop().animate({opacity: 1}, 1);
         $('.modalui__next').attr('onClick', 'LImage(\''+data.data.content.next+'\')');
         $('.modalui__prev').attr('onClick', 'LImage(\''+data.data.content.prev+'\')');
      });
}


Проблема в том, что строка (пометил комментарием в коде), отрабатывается раньше чем функция GetImageData. В итоге в src ничего не записывается.
Что тут происходит? как исправить?
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
Добавить в GetImageData коллбэк функцию, которая будет срабатывать только после удачной загрузки данных с сервера (и вставить ваш код в тело этой функции). Если используете $.ajax или $.get, почитайте документацию api.jquery.com/jquery.get - найдите там success функцию, она срабатывает как раз после удачного запроса, в нее и добавьте ваш код.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Ni55aN
@Ni55aN
А GetImageData разве не получает данные асинхронно? В данном случае в data данные с сервера не записываются, и код выполняется дальше, не дожидаясь ответа сервера

Так или иначе, записаться в data полученные данные не могут, так как ответ с сервера приходит асинхронно, а это требует записи через callback.
Ответ написан
Комментировать
RTW
@RTW
Форкаю, читаю, употребляю
Я так понимаю на промисе GetImageData делается пост запрос, вынеси свою строку в успешное выполнение запроса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы