- Когда работает $ (document) .ready ()?
- Solutions Collecting From Web of «Когда работает $ (document) .ready ()?»
- Подгрузка отдельных блоков на странице
- Метод подгрузки
- Области применения
- JQuery load()
- Video Tutorial on load()
- Passing variable while loading the file using GET method
- HTML
- JQuery
- encodeURIComponent()
- POST method
- HTML
- JQuery
- Using Callback function
- HTML
- JQuery
- Class not recognized for handling events in main page
- Application using load
- Select records based on user input
- Associated events of loaded elements
Когда работает $ (document) .ready ()?
Замечания по этому вопросу заставили меня задуматься. Когда срабатывает функция $(document).ready() ? Очевидным ответом будет «когда документ готов», но когда это точно?
Например, если бы я включил буферизацию вывода и сбросил мой результат, а PHP продолжал выполнение , не отправил бы этот вывод в браузер? Итак, каким образом документ может быть готов до того, как скрипт PHP завершит выполнение, или событие подождало, пока запрос не будет завершен?
РЕДАКТИРОВАТЬ:
Ответы, похоже, в основном согласны с тем, что событие срабатывает, когда клиент считает, что он готов.
Чтобы лучше понять (что я должен был сделать в первую очередь), я просто установил тест:
php ob_start(); ?> ?>
В результате в этом примере содержимое сразу же появилось на странице, но предупреждение не произошло до тех пор, пока цикл не был выполнен, или время ожидания скрипта (30 секунд).
В зависимости от того, какой браузер вы используете, я попытался вставить это в мой цикл:
И Chrome, похоже, автоматически исправил его, поместив те теги в конце страницы (как видно в инспекторе веб-разработчиков). Просмотр источника страницы показал его посередине, где я его повторил.
Solutions Collecting From Web of «Когда работает $ (document) .ready ()?»
ready событие jQuery для документа срабатывает, как только jQuery определяет, что DOM доступен. Точный механизм зависит от браузера.
Взгляните на соответствующий исходный код .
Во-первых, есть проверка, чтобы проверить, действительно ли DOM уже доступен в точке, где была сделана попытка связать прослушиватель с событием. Если это так, ответные вызовы должны быть немедленно запущены , хотя они фактически не срабатывают немедленно, чтобы позволить коду уже занимать текущий слот выполнения, чтобы отменить обработчики, если это необходимо.
Если DOM еще недоступен, делается попытка связать прослушиватель событий с DOMContentLoaded событием DOMContentLoaded браузера – это «правильный» собственный способ попросить браузер сообщить вам, когда DOM доступен, но он относительно современный особенность. Если это невозможно (это почти наверняка указывает, что код работает в старой версии IE), код возвращается к нескольким механизмам:
- Попробуйте подключиться к событию onreadystatechange документа. Это не безупречно и будет позже, чем DOMContentLoaded , но это очень хорошо.
- Вернитесь к событию load объекта window . Это часто будет намного позже, чем DOM, но это последняя защита от сбоев, чтобы гарантировать, что событие всегда будет срабатывать в конечном итоге.
- Наихудший сценарий: продолжайте опрос DOM до тех пор, пока он не будет доступен.
С точки зрения PHP, возможно (но маловероятно), чтобы это произошло до того, как ваш PHP-скрипт завершил выполнение. Бывают ситуации (например, длительный опрос), где событие будет срабатывать до завершения вашего сценария, но это произойдет только в старых браузерах. Однако в этих сценариях вы не должны (не должны) использовать эти события вообще, вы просто разместите соответствующие элементы в теле страницы, чтобы они могли быть выполнены, как только они будут загружены , не дожидаясь остальной части DOM.
Лично я никогда не использую ни одно из этих событий с нагрузкой, более или менее по этой причине. YMMV.
Например, если бы я включил буферизацию вывода и сбросил мой результат, а PHP продолжал выполнение, не отправил бы этот вывод в браузер?
Да, он отправил вывод, но это не значит, что браузер считает, что сервер завершен. Я знаю, что это не PHP, но мне нравится статья Perl, страдающая от буферизации . Документ готов, когда UserAgent считает, что он готов. Однако браузер будет держать сокет открытым, хотя он все еще считает, что он принимает данные, и никакой сигнал END не был отправлен.
Итак, каким образом документ может быть готов до того, как скрипт PHP завершит выполнение, или событие подождало, пока запрос не будет завершен?
Обычно браузер будет ждать, пока сервер завершит отправку данных. Если вы очищаете выход, возможно, веб-сервер может зайти во время работы сценария, например, я думаю, что Apache имеет по умолчанию 2 минуты. Если сервер отправляет конечный сигнал, ваш документ завершен, и ваш браузер может подготовить DOM и запустить событие DOMReady, даже если ваш скрипт все еще работает на сервере.
Вопреки некоторым другим комментариям