Сообщение от xintrea
|
Есть у меня "класс", у которого сделан метод init(). В нем происходит вызов метода load() для загрузки данных с сервера (реализация jQuery xmlrpc).
Задача: вызвать загрузку данных и дождаться результата. Если загрузка удачна - продолжить инит, если была ошибка - завершить инит.
|
Решение - добавить в init дополнительные функции, первая содержит порядок инициализации при успешной загрузке, вторая при неуспешной и вызывать их колбэком на
событие загрузки.
Сообщение от xintrea
|
Проблема в строке с циклом while(). На нем скрипт затыкается как на бесконечном цикле.
...
Вопрос. Почему не работает этот кусок кода? Почему в цикле while() не отслеживаетс изменение свойства loadStatus?
|
Так и должно быть. Цикл javascript не делим, пока он не отработает никакие внешние события ни на что повлиять не смогут.(именно по этому предложенный выше вариант работать
не будет также как и ваш)
Сообщение от xintrea
|
Как сделать чтоб отслеживалось?
|
Никак. В javascript невозможна "приостановка" выполнения вручную, т.к. код выполняется
в одном потоке и эта самая приостановка вызвала бы полное прекращение взаимодействия со страницей как таковой.(что вы и наблюдаете при вечном цикле). Событийная модель является единственным
нормальным вариантом, позволяющим пользователю продолжать работу со страницей пока идут какие-либо фоновые процессы.
Сообщение от xintrea
|
Флаги не помогают. Встраивать обработчики прямо в "линейный" код как лямбды - это издевательство, код получает рваный и плохо сопровождаемый.
|
Если делать всё как вы привыкли в другом языке - возможно. Однако всё выходит красиво и аккуратно если не тянуть чуждую идеологию из других языков, а писать изначально на javascript.
P.S. Если вы ооочень этого хотите и вам глубоко покласть на идеологию javascript, то можно использовать синхронный ajax запрос(именно то что вам нужно - с ожиданием загрузки и полной остановкой работы). Но это делать крайне не рекомендуется. Пример.