#javascript #jquery #ajax #ejs
#javascript #jquery #ajax #ejs
Вопрос:
У меня есть шаблон EJS, который принимает файл userData с сервера.
Как я могу реализовать обновление пользовательских данных в шаблоне без перезагрузки страницы?
Мне удалось отправить данные на сервер без перезагрузки страницы методами Ajax post в других частях приложения.
Но не могу найти подход к отображению обновленных данных в шаблоне без перезагрузки страницы.
Шаблон EJS
Он отображается, когда браузер переходит к URL /tasks
Этот фрагмент является лишь частью приложения для демонстрации структуры.
<%userData.forEach(function(project){%>
<div class="project">
<div class="projectHeader">
<div class="projectTitle">
<span>
<a data-toggle="modal" data-target="#editDeadLineModal">
<i id="setListDeadline" data-id="<%=project.id%>" class="far fa-calendar-alt fa-2x" data-toggle="tooltip" data-placement="top" title="Set Deadline"></i>
</a>
</span>
<%if(project.deadline == null){%>
<h5 class="projectName"><%=project.name%></h5>
<%}else{%>
<% var deadline = project.deadline.toDateString()%>
<h5 data-toggle="tooltip" data-placement="top" title="Deadline <%=deadline%>" style="align-items: center;" class="projectName">
<%=project.name%>
</h5>
<%}%>
</div>
</div>
</div>
Я использую цикл forEach, чтобы захватить каждый project
элемент в файле и отобразить его <div class="project">
, чтобы страница была заполнена таким количеством объектов, в которых она находится userData
.
-
userData
содержит:project.id
project.name
project.deadline
Например, я изменил project.name
и отправил с помощью метода Ajax post новые данные на сервер.
Я знаю, что он сохраняется — так как после выполнения запроса регистрируется «Новые сохраненные данные».
Вот мой метод GET.
После достижения URL-адреса запрашивайте базу данных для всех projects
и отправляйте их в шаблон.
app.get("/tasks", async (req, res) => {
const results = await pool.query(`SELECT * FROM projects`);
res.render("tasks", {
userData: results,
})
})
Комментарии:
1. Вы хотите, чтобы сервер отправлял сообщение клиентскому браузеру, например, в приложениях реального времени, например, в чате, для которого требуется веб-сокет или http-пул от сервера к клиенту, проверьте сокет. ввод-вывод для примеров и документов
2. @MedetTleukabiluly спасибо за подсказку (сейчас ищу эту опцию), но технически возможно реализовать обновление шаблона ejs без перезагрузки, только с помощью Ajax или Jquery в данном конкретном случае?
3. Браузер не знает, когда обновлять, вот в чем проблема
4. Как я понимаю —
$(".project").on('click', function() { refresh page code }
это не случай обновления. Так ли это?5. Поскольку вы уже выполняете ajax-запрос для обновления данных, вы можете просто выполнить еще один ajax-вызов при успешном выполнении, например
$.post("update", data).done(function() { $.get("tasks").done(function(data) { render data }) })
. Вы можете улучшить читаемость, используя async / await или определяя функцию get отдельно