Дамы и Господа, есть такой ajax код:
function ajax(url, callback, data, request) {
try {
request = new(this.XMLHttpRequest || ActiveXObject)('MSXML2.XMLHTTP.3.0');
request.open(data ? 'POST' : 'GET', url, 1);
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
request.setRequestHeader('Content-type', 'application/json');
request.onreadystatechange = function () {
request.readyState > 3 && callback && callback(request.responseText, request);
};
request.send(data)
} catch (e) {
window.console && console.log(e);
}
};
в отдельной папке.
И в отдельной папке такой JS файл main.js:
document.addEventListener("DOMContentLoaded", function() {
const iDroot = document.getElementById('root');
ajax('../pages/index.html', function(res) {
iDroot.appendChild(res);
})
const wrapper = document.getElementById('wrapper');
console.log('wrapper');
});
Если в место строчки iDroot.appendChild(res); написать iDroot.innerHTML = 'res';, то все работает.
Объясните, почему в данном случае .innerHTML работает, а .appendChild() нет?
Больше всего смущает, что в консоли wrapper видит.
В консоли показывает:
В вашем коде, тут: ajax('../pages/index.html', function(res) {
В аргумент callback функции res будет передана строка (браузер посылает http get запрос, получает ответ. Тело ответа - это всегда просто String).
После чего, при вызове .appendChild(res) браузер пытается добавить содержимое переменной res, предполагая что это экземпляр Node в конец списка дочерних элементов родителя. Но оказывается, что это строка, поэтому выбрасывается соответствующая ошибка parameter 1 is not of type 'Node'.
В случае использования element.innerHTML = '...' - браузер распарсит переданную строку, попытается на ее основе создать новые узлы Dom, и вставит их внутрь элемента.
Про appendChild: https://developer.mozilla.org/ru/docs/Web/API/Node/appendChild
Про innerHTML: https://developer.mozilla.org/ru/docs/Web/API/Element/innerHTML
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости