![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Sheff |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Народ, нужна помощь и срочно. Допустим у меня есть код:
Так вот, как мне дождаться полной загрузки этого файла ? Т.е я хочу после
Есть у Image() какое-нить свойство, которое содержит его состояние ? Или может как-нить по другому это всё можно реализовать ? Предлагайте, буду рад любым советам -------------------- -------------------------- Шеф всегда прав :) |
||||||
|
|||||||
Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Также есть свойство: readyState. А еще лучше продолжать загрузку и переписать img.onload=function в которой и сделаешь то, что тебе нужно.
Решит многие вопросы ![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Спасибо, попробую =)
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Sheff |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Мда, получилось, но не совсем, дело в том что:
Тормозит браузер и не даёт картинке загрузится, я вообще вот что делаю, ставлю event handler:
Функция setCookies() у меня вызывается всякий раз когда юзер выходит с текущего URL'а либо закрывает окно, мне нужно, чтобы в функции setCookies() всё что пользователь ввёл в полях формы текущего URL'а посылалось на сервак, для этот я формирую запрос типа: save.php?name0=firstname&value0=Stas&name1=lastname&value1=Vorobiov Затем, чтобы пользователь ничего не увидел, что типа посылается инфа, я делаю так:
Так вот дальше нужно подождать, пока запрос уйдёт на сервер и потом уже можно окно закрывать, переходить на другой URL т.д. Так вот в чём вопрос, как же подождать. while'ом не получается, я уже сказал почему, как же быть ? -------------------- -------------------------- Шеф всегда прав :) |
||||||
|
|||||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
По моему все происходит при закрытии окна, то есть уже не важен результат.
Можно сделать такой "запрос" и банально подождать 3 секунды на то что бы он дошел. На серваке если используется PHP установишь ignore_user_abort(true) и сделаешь что надо. [q]Затем, чтобы пользователь ничего не увидел, что типа посылается инфа...[/q] "Пользователь" может не понять ![]() Может лучше кнопку сделать со строкой процесса? -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
А как банально подождать 3 секунды ? У меня была такая идея, но реализовать не получилось. Понимаешь в чём дело, после того как setCookies (функция, которая вызывается при событии onbeforeunload) завершит свою работу, окно закрывается => эти 3 секуды надо ждать так чтобы не выходить из этой функции, можно конечно:
Но так не катит, т.к while тормозит всю страницу и => запросы не шлёт и вообще ничего не делает, полный halt Как же это реализовать, чтобы браузер "банально" ждал 3 секунды ? -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
Sheff в JS была хорошая функция timer, может она тебе пригодится?
|
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Наверное браузер перед закрытием окна уже не хочет что либо грузить, т.к. это уже не надо. Самая здоровая реакция браузера, если это IE то радует что здесь они не сглупили. Может все же лучше сделать кнопку или работать не из предсмертного события ![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Sheff |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Secandr timer не катит, ведь он работает через определённый интервал времени, а как только функция завершается уже не важно что там выполянется по setTimeout.
Sardar
Нет, это не так, он всё прекрасно грузит, проверял так:
В первый раз он вывел false, а во второй раз (я подождал перед тем как кликать на 'Ok' диалога со строкой 'wait') - true. Так что, то что я хочу сделать можно, но как, этот вопрос всё ещё не решён... -------------------- -------------------------- Шеф всегда прав :) |
||||
|
|||||
Непрофессионал |
|
|||
Unregistered |
[I]Добрый день, я рискую дать недельный совет, но сталкивался с похожей проблемой, как я знаю, пока в JS не выполнится до конца функция, браузер ни к чему другому не приступает (крутится внутри цикла), другими словами, браузер не хочет ничего делать
параллельно с операцией в цикле. Но, вообще, браузер много чего делает параллельно... если пока не доступна одна часть документа, грузит другую и т.д. Следовательно, внутри цикла while можно попытаться задать такой процесс, который браузер согласен выполнять параллельно с загрузкой рисунка - это должна быть не комманда JS, а, например, загрузка ещё чего-то. Не уверен, что сработает, но вот простой пример: скрипт загружает последовательные числа в окно, потом рисунок (любой), затем должен менять его, но не поменяет, хотя команда уже дана, пока не - там есть комментарий
|
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Непрофессионал, ты абсолютно прав, я тож делал что-то похожее, но вот только alert меня не устраивает, т.к я не хочу, чтобы пользователь что-нить видел, вот если-б что-нить другое грузить, но только вот что. Было бы неплохо, если бы в JavaScript'е было б что-то типа VB'шного DoEvents, в VB если вставить DoEvents в цикл, то паралелльно с циклом выполняются другие события, но в JS я ничего похожего не знаю =(
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Непрофессионал |
|
|||
Unregistered |
У меня получилось и вот так:
вместо alert меняем фон, думаю, много ещё чего подойдёт, числа я в цикле увеличил, чтобы видно было забыл сказать - всё это у меня работает в MSIE 5.5. Опера скрипт не поняла (где-то есть ошибка, видимо или у меня или в Опере) |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Непрофессионал, а у меня не получилось, но я писал вот что:
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Непрофессионал |
|
|||
Unregistered |
Я догадываюсь, в чём дело. А оно может быть в том, что загрузка файла (признание его complete) это дело не браузера а ОС, виндовс или что там... Потому речь должна идти о многозадачности (параллельности) не на уровне ИЭ, а на уровне ОС. Потому оно и работает с alert, что прорисовка окна - дело ОС (стандартная функция операционной системы), а при изменении фона браузер сам рисует в собственном окне, не затрагивая ОС. Гипотеза - нужно найти такое действие вместо alert, которое, давало бы новую задачу ОС. Тут трудно предположить, что это может быть, я не настолько опытен - изменение размеров окна, создание нового, изменение размеров фрейма (на 1 пиксел) или что-то подобное, таких функция я не знаю
Я проверял, идёт ли запрос на сервер во время работы цикла, идёт, дело только в том, чтобы закончить цикл... |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Уже хорошо, значит дело тока в этом грёбаном цикле, но как его закончить так чтобы без лишней фигни, не знаю, надо думать и много и не знаю можно ли вообще что-то придумать... -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |