Почему вылезает ошибка doc.head is null при полной замене html страницы?
Добрый день.
Стоит задача заменить весь html код страницы на новый, который приходит через ajax. Грубо говоря загрузка страниц без перезагрузки. Нажимаешь определенные ссылки - уходит get запрос на сервер, в ответ приходит полный html нужной страницы (начиная с !DOCTYPE). Меняю благодаря незабвенному jquery:
$('html').html(result.code);
И вроде бы все работает так, как надо, проблем нет никаких, однако в консоле после каждой такой смены вылезает ошибка, которая вроде бы ни на что не влияет, но неприятно:
|
1 |
Uncaught TypeError: can't access property "appendChild", doc.head is null |
Чтобы это значило? Может после смены html надо какой-то триггер вызвать или заменять как-то не так?
Дополнительно:
Содержание
ты не можешь изменять html как дом элемент
|
1 |
var newHTML = document.open("text/html", "replace"); newHTML.write(Str); newHTML.close(); |
Все работает, но только в первый раз, а дальше скрипты все слетают и страницы перезагружается. Я так понимаю, потому что фактически новый документ был создан, а обработчики висят на старом...
Задача из разряда "инвестор хочет бегло глянуть будет ли лучше, ведь это современно". По опыту знаю, что ему понравится и он решит оставить эту реализацию 100%, поэтому переживаю за ошибку, вдруг завтра будет задача, которую нельзя будет реализовать из-за этой ошибки. Или она не влияет ни на что?
в ответ приходит полный html нужной страницы (начиная с !DOCTYPE).
А так - напротив ошибки указывается место в коде которое её вызвало, тыкаешь и смотришь кто там пытается обратиться к head которого пока нет.
Разница будет лишь в том что обновиться url и браузер куда лучше сумеет обработать перерисовку.:)
Ну это хотелки инвестора. Сайт итак быстро грузится, практически без перезагрузок, круглешок загрузки виден на 0.5сек при переходе и вот он инвестора напрягает. Но из-за этого делать грамотное разделение фронта с бэком и рестом между ними я не хочу, мне банально жаль времени. Поэтому приходится выбирать максимально быстрое решение.
А так - напротив ошибки указывается место в коде которое её вызвало, тыкаешь и смотришь кто там пытается обратиться к head которого пока нет.
Да ладно)))
Вот как раз этот скрипт и вызывает ошибку, именно та строка, которая заменяет $('html').html(result.code).
Ответы:
Попробуйте удалить старый "head" с содержимым
|
1 |
$('head').remove(); $('html').html(result.code); |
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Ошибка "doc.head is null" обычно возникает, когда вы пытаетесь обратиться к элементу head документа, который не был найден. Это может произойти при полной замене HTML страницы, когда вы перезагружаете страницу или загружаете новый HTML документ.
Проблема может возникать из-за того, что ваш скрипт выполняется до того, как документ полностью загружен, или из-за того, что вы пытаетесь обратиться к элементу head, который не существует в новом HTML документе.
Для того чтобы избежать ошибки "doc.head is null" при полной замене HTML страницы, вам следует убедиться, что ваш скрипт выполняется после того, как документ полностью загружен. Для этого вы можете использовать событие DOMContentLoaded:
Также, убедитесь, что элемент head существует в вашем новом HTML документе. Если вы хотите добавить какие-то элементы в head, вы можете использовать следующий код:
Используя эти рекомендации, вы сможете избежать ошибки "doc.head is null" при полной замене HTML страницы и ваш скрипт будет успешно работать.