как загружать данные на сайт так чтобы они не отображались на странице?
Учусь писать сайты, сейчас работаю над страницей планировщика.
Проблема следующего характера - на прикрепленном фото, как вы можете видеть, есть 2 основных блока (календарь и блок где более подробно расписаны задачи на день). Я хотел изначально передавать данные из БД вместе с загрузкой html-страницы просто помечая те элементы которые должны появиться только в определенный момент как display: none; - так как их видеть не должны. Все элементы сохраняются в календарь. А в блок дня который на фото слева они просто копируются при помощи JS.
Манипуляция данными таким образом мне кажется очень неправильным способом. Подскажите как и где я могу хранить данные получаемые из БД чтобы ими потом можно было манипулировать без перезагрузки страницы с помощью JS. Да и вообще как я могу в принципе передавать данные из БД не перезагружая ее???
Backend пишу на PHP. Frontend на нативных HTML, CSS, JS
Ответы (1 шт):
Подскажите как и где я могу хранить данные получаемые из БД чтобы ими потом можно было манипулировать без перезагрузки страницы с помощью JS. Да и вообще как я могу в принципе передавать данные из БД не перезагружая ее?
Вот некая иллюстрация как можно работать с данными... Про формирование серверного АПИ уже могут рассказать PHPисты.
let data = {}
document.querySelector('#read').addEventListener('click', e => {
const o = e.target
o.disabled = true
const url = 'https://reqres.in/api/users?page=1'
fetch(url)
.then(res => res.json())
.then(res => {
data = res
o.disabled = false
})
.catch(console.log)
})
document.querySelector('#show').addEventListener('click', e => {
const arr = data?.data ?? []
const ob = document.querySelector('#box')
ob.innerHTML = ''
arr.forEach(o => {
const html = `
<div>
<img src='${o.avatar}' />
<p>Имя: ${o.first_name} ${o.last_name}</p>
</div>
`
ob.insertAdjacentHTML('beforeend', html)
})
})
document.querySelector('#clear').addEventListener('click', e => {
document.querySelector('#box').innerHTML = ''
})
#box {
display: flex;
flex-wrap: wrap;
}
#box div {
margin: 10px;
padding: 5px;
border: 1px solid;
border-radius: 5px;
}
<button id='read'>Прочитать данные</button>
<button id='show'>Показать</button>
<button id='clear'>Скрыть</button>
<div id='box'></div>