Дамы и Господа, есть такой 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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как прочитать заголовок у ответа, к примеруContent-Type? У меня это не получается сделатьЯ пытаюсь хотя-бы отобразить все заголовки
При создании модального окна столкнулся с проблемойЕсть изображение, при клике на которое, открывается модальное окно, но на этом изображении...
Почему unexpected token '(' во второй функции?