Показать сообщение отдельно
  #2 (permalink)  
Старый 01.06.2013, 01:23
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,595

Сообщение от xintrea Посмотреть сообщение
Есть у меня "класс", у которого сделан метод init(). В нем происходит вызов метода load() для загрузки данных с сервера (реализация jQuery xmlrpc).

Задача: вызвать загрузку данных и дождаться результата. Если загрузка удачна - продолжить инит, если была ошибка - завершить инит.
Решение - добавить в init дополнительные функции, первая содержит порядок инициализации при успешной загрузке, вторая при неуспешной и вызывать их колбэком на событие загрузки.

Сообщение от xintrea Посмотреть сообщение
Проблема в строке с циклом while(). На нем скрипт затыкается как на бесконечном цикле.
...
Вопрос. Почему не работает этот кусок кода? Почему в цикле while() не отслеживаетс изменение свойства loadStatus?
Так и должно быть. Цикл javascript не делим, пока он не отработает никакие внешние события ни на что повлиять не смогут.(именно по этому предложенный выше вариант работать не будет также как и ваш)

Сообщение от xintrea Посмотреть сообщение
Как сделать чтоб отслеживалось?
Никак. В javascript невозможна "приостановка" выполнения вручную, т.к. код выполняется в одном потоке и эта самая приостановка вызвала бы полное прекращение взаимодействия со страницей как таковой.(что вы и наблюдаете при вечном цикле). Событийная модель является единственным нормальным вариантом, позволяющим пользователю продолжать работу со страницей пока идут какие-либо фоновые процессы.

Сообщение от xintrea Посмотреть сообщение
Флаги не помогают. Встраивать обработчики прямо в "линейный" код как лямбды - это издевательство, код получает рваный и плохо сопровождаемый.
Если делать всё как вы привыкли в другом языке - возможно. Однако всё выходит красиво и аккуратно если не тянуть чуждую идеологию из других языков, а писать изначально на javascript.


P.S. Если вы ооочень этого хотите и вам глубоко покласть на идеологию javascript, то можно использовать синхронный ajax запрос(именно то что вам нужно - с ожиданием загрузки и полной остановкой работы). Но это делать крайне не рекомендуется. Пример.
__________________
29375, 35

Последний раз редактировалось Aetae, 01.06.2013 в 02:36.
Ответить с цитированием