05.04.2012, 00:37
|
Аспирант
|
|
Регистрация: 05.04.2012
Сообщений: 65
|
|
проверить загрузилась ли страница на аяксе
всех приветствую. в интернете к сожалению так и не нашел ответа на этот вопрос.. пробовал жонглировать с .live jquery но увы, пока что без успешно результата. Задача казалось бы простая. Аяксом загружается html и инсертится (innerhtml) в определенный див, например #mydiv. Так вот, необходимо выполнить определенное действие после того как страница загрузится. В идеале конечно нужно поставить вообще что-то вроде window.onload ну в крайнем случае только на этот див. Имги перебирать в массиве это не подходит, минимум потому что там еще может быть и ifram'ы. В общем нужно чтобы при многократной перезагрузке аяксом это событие вызывалось. На крайних случай так же подойдет jquery поставить какое-то событие на onload всех имг (по классу выбрать) в данный див.
Весьма надеюсь на советы. Кстати, еще заметил такой момент, если иннерhtml'ом инсертить iframe, то страница подвисает пока он не подгрузится, это можно вылечить без мега-жонглирований?
|
|
05.04.2012, 14:05
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Так если Вы пользуетесь AJAX и, скорее всего, он сделан на объекте xmlHttp (который работает на базе ActiveXObject/XMLHttpRequest), то при загрузке данных проверяйте состояние xmlHttp.readyState == 4 и xmlHttp.status == 200. Если статусы в норме - значит страница полностью загрузилась и её можно помещать в нужный DIV.
Если же принятом тексте есть iframe_ы и Вы хотите после вставки этого текста DIV_e отловить полную загрузку во фреймы, то тогда надо предусмотреть обработку события onload фрейма, либо вставить в эти фреймы (в самый конец) javascript-функции, оповещения о конце загрузки данных во фрейм. Естественно, что эти фреймы должны находиться в родственном домене.
|
|
05.04.2012, 22:20
|
Аспирант
|
|
Регистрация: 05.04.2012
Сообщений: 65
|
|
аякс запрос выглядит примерно так:
$.get('/page.php?'+idvar, function(e) { showresult(e,somevar); }, 'html');
загружается текст, который передается в функцию showresult где и происходит его обработка, то есть формирвоание конечного html ну и затем делаем innerhtml. Где собственно проверку производить на readyState ? Помоему тут этот вариант не подойдет.
Что касается фреймов, это видео например с ютуба.
|
|
05.04.2012, 22:43
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
1. Если Вы используете фреймворк и его метод $.get(), то этот метод как раз и проверяет (внутри себя) необходимые статусы. Если статус плохой, то запрос не отдаст Вам принятый текст. Я $.get() не пользуюсь. Посмотрите описание этого метода - там должна быть возможность возвращать Вам ошибки запроса для их анализа.
2. Для просмотра видео с ютуба совсем не обязательно использовать фреймы (и мучиться с ними). Вставляйте в свой html-текст Adobe Flash Player прямо в DIV_ы.
|
|
06.04.2012, 00:31
|
Аспирант
|
|
Регистрация: 05.04.2012
Сообщений: 65
|
|
Ну можно установить обработчики .success() и .complete() только что это мне даст? Сам то текст загружен аяксом, понимаете? А загрузка картинок начинается уже при иннерhtml'e, т.к. в запрашиваемых аяксом данных картинок еще нет, их html код появляется уже в обрабатывающей функции callback (там идет парсинг текста).
Насчет ютуба, да я как бы и не мучаюсь, просто вставляю html код фреймов. Попробовал непосредственно обджектом - все равно подвисает страница ненадолго когда загружается обджект, так что особого смысла не вижу напрямую вставлять в див.
|
|
06.04.2012, 15:11
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Нуу, при медленном интернете на большинстве сайтов картинки появляются не сразу, а через какое-то время - все понимают почему так и как бы к этому привыкли уже. Можете всё грузить в скрытый фрейм, а потом по факту его загрузки делать видимым. Во время загрузки показывайте анимированный gif "loading"... Хотя как по мне это "крутящееся колесо" раздражает еще больше.
|
|
06.04.2012, 20:19
|
Аспирант
|
|
Регистрация: 05.04.2012
Сообщений: 65
|
|
Кстати там тип не html а text. Оно ведь как я понимаю тогда просто выдает ответ "как есть". А вот насчет ifram'a - это идея в общем то неплохая.. но желательно сразу показать содержимое.. а может сразу показывать и параллельно создавать iframe? Но это конечно небережливое отношение к трафику пользователя
И всетаки, неужели с помощью jquery это так проблематично реализовать? ( Я смогу предварительно повесить на все имги, которые я хочу проверить загружились ли, скажем, айди какие-то, а потом по таймеру могу проверять, загрузились ли все они (Image.complete). Наверное так и сделаю. Это хоть что-то, хотя все имги так не получится проверить, но хоть основные. Кстати вроде бы где-то читал что .complete может некорректное что-то возращать если имга закэшировалась, это так? А если коннект будет закрыт? Есть тут те кто уже опыты проводил?
Последний раз редактировалось codingfighter, 06.04.2012 в 20:25.
|
|
|
|