Задать вопрос
@xomiles

Как обновлять данные без перезагрузки страницы?

Представим что у меня есть страница на которой расположен div в котором множество блоков, а в этих блоках данные из базы данных, в общем назовём это всё списком. Мне нужно чтобы этот так называемый список постоянно обновлялся. Подскажите пожалуйста как мне это реализовать?
  • Вопрос задан
  • 8127 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Мои глаза слезятся от такого кода.
Не делайте так!
Просто подключите vue js https://vuejs.org/guide/introduction.html (25-40 kb)
И работайте на высоком уровне абстракции.
Я набросал код который вам поможет, данный подход имеет следующие плюсы:
* Не тянет много лишнего
* минимален
* с сервера забирается только необходимое
* нет лапши верстки
* меньше загрузка сети
* не перестраивается дом, точнее перестраивается минимально
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Alexandroppolus
@Alexandroppolus
кодир
если список должен обновляться по инициативе сервера, то WebSocket в помощь
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Пример функции для выборочного обновления контента:
async function elementUpdate(selector) {
	try {
		var html = await (await fetch(location.href)).text();
		var newdoc = new DOMParser().parseFromString(html, 'text/html');
		document.querySelector(selector).outerHTML = newdoc.querySelector(selector).outerHTML;
		console.log('Элемент '+selector+' был успешно обновлен');
		return true;
	} catch(err) {
		console.log('При обновлении элемента '+selector+' произошла ошибка:');
		console.error(err);
		return false;
	}
}

Вызывайте функцию elementUpdate() передав внутрь него CSS-селектор того элемента, который вы хотите обновить.

Например, если хотите обновить div-блок который имеет класс test, то достаточно выполнить:
elementUpdate('.test');

Если хотите выполнять обновление каждую секунду, можно использовать цикл:
// Запускаем функцию autoUpdate по готовности страницы:

document.addEventListener('DOMContentLoaded', autoUpdate);

// Функция для запуска цикла:

async function autoUpdate() {
	
	// Бесконечный цикл:
	
	while (true) {
		
		// Обновляем блок .test:
		await elementUpdate('.test');
		
		// Выжидаем 1000 миллисекунд перед повторением цикла:
		await new Promise(function(s) { setTimeout(s, 1000); });
		
	}
	
}

// Функция для обновления контента:

async function elementUpdate(selector) {
	try {
		var html = await (await fetch(location.href)).text();
		var newdoc = new DOMParser().parseFromString(html, 'text/html');
		document.querySelector(selector).outerHTML = newdoc.querySelector(selector).outerHTML;
		console.log('Элемент '+selector+' был успешно обновлен.');
		return true;
	} catch(err) {
		console.error('При обновлении элемента '+selector+' произошла ошибка:', err);
		return false;
	}
}
Ответ написан
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Ajax, jQuery - самый простой способ
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы