【发布时间】:2020-04-22 02:50:29
【问题描述】:
现在整个 div 重新渲染,但我正在寻找一种只重新渲染更新的统计信息的方法
这些是我现在拥有的部分
updatestats.js
document.querySelector("#submit").addEventListener("click", function (e) {
let country = document.querySelector("#country").value
let numberCases = document.querySelector("#number").value
fetch(base_url + "/api/v1/stats/updatestats", {
method: "put",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
"country": country,
"numberCases": numberCases
})
}).catch(err => {
console.log(err);
})
primus.write({ "action": "update" })
stats.js
primus.on("data", (json) => {
if (json.action === "update") {
document.querySelector("#overview").innerHTML = ""
appendInfo()
}
})
function appendInfo() {
fetch(base_url + "/api/v1/stats", {
method: "get",
headers: {
'Content-Type': 'application/json'
},
}).then(response => {
return response.json();
}).then(json => {
json.data.stats.forEach(stat => {
let country = stat.country
let numberCases = stat.numberCases
let p = document.createElement('p')
let text = document.createTextNode(`${country}: ${numberCases}`)
p.appendChild(text)
let overview = document.querySelector("#overview")
overview.appendChild(p)
})
}).catch(err => {
console.log(err);
})
}
window.onload = appendInfo();
stats.pug
body
h1 Cases by country
div#overview
因此,如果我只更新比利时国家/地区,我只希望更改该统计信息。现在一切似乎都重新加载了
【问题讨论】:
-
你试过
event.preventDefault()吗?它仅在更新数据时停止页面重新加载 -
您可以不使用 fetch 上传和下载数据,而是使用 websockets 将更改的数据发送到服务器,然后从服务器将其传递给所有其他客户端。这样,每个人都只能获得通过套接字更改的数据。从那里将您已有的数据与新收到的数据进行比较,并仅更新更改的元素。
-
@AvivLo 我在我在这里添加的最后一个 updatestats.js 行下面有 e.preventDefault() 行
-
@EmielZuurbier 你有什么例子吗,因为我知道了理论,但不知道如何在我的代码中添加它
标签: javascript node.js websocket primus