@Vladislav105

Как повторно использовать функцию с объектом xmlhttprequest?

Новичок, не кидайтесь тапками)
Написал вот такую функцию для получения новостей с сайта:

function getNews(fileName, className, key, limit, offset = 0) {
    xhr = new XMLHttpRequest();
    xhr.error = popup('Ошибка при запросе к серверу', 'error.svg');
    xhr.open('POST', 'server/' + fileName);
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200)
            document.querySelector(className).insertAdjacentHTML("beforeend", xhr.responseText);
    }
    xhr.send("key=" + key + "&limit=" + limit + "&offset=" + offset + ";");
    console.log(xhr);
}


При втором вызове возникает ошибка, мол ответ содержит null.
Uncaught TypeError: Cannot read property 'insertAdjacentHTML' of null

Что мне нужно сделать, чтобы при каждом вызове функция отрабатывала успешно?
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@zkrvndm
Боты, парсеры, расширения
Попробуйте так:
async function getNews(fileName, className, key, limit, offset) {
	
	var params = new URLSearchParams();
	
	params.append('key', key);
	params.append('limit', limit);
	params.append('offset', offset);
	
	var body = params.toString();
	
	var news = await (await fetch('server/' + fileName, {
		'method': 'POST',
		'headers': {
			'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
		},
		'body': body
	})).text();
	
	if (document.querySelector(className)) {
		document.querySelector(className).insertAdjacentHTML('beforeEnd', news);
	} else {
		console.log('Элемент соответствующий селектору '+className+' отсутствует на странице!');
	}
	
	console.log("Ответ сервера:\n" + news);
	
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы