[英]How do I trigger the server to send an SSE by clicking a button on the page?
我正在学习服务器发送的事件并想尝试我自己的示例。 我发现的所有示例都设置了一个服务器,该服务器仅使用一个时间间隔将新事件发送到 HTML 页面上的 EventSource。 我想做的是在页面上有一个按钮来调用服务器,该按钮将触发一个新事件发送到 EventSource 对象。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home</title>
</head>
<body>
<h1>Home</h1>
<div id="click-container">
</div>
<script type="text/javascript">
var source = new EventSource('/clicks');
var clickContainer = document.getElementById("click-container");
source.addEventListener("message", function(e) {
clickContainer.innerHTML = e.data + '<br>';
});
</script>
<h1>Clicker</h1>
<button type="button" id="clicker">Click Me</button>
<script type="text/javascript">
var btn = document.getElementById("clicker");
btn.addEventListener("click", function(e) {
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
console.log(req.responseText);
}
};
req.open('GET', '/click', true);
req.send(null);
});
</script>
</body>
但是对于我在 Node 中做的服务器,我不知道该怎么做。 我尝试将请求发送到 EventSource 正在侦听的同一 URL,但这只会导致该请求陷入打开的连接中并且永远不会完成。 我只是无法理解我需要做什么,我能解释一下这应该如何工作吗? 谢谢
为此,您可以使用fetch()
客户端.js:
document.getElementById("clicker").onclick = function() {
data = { something: "123"}
fetch("/sendData", {
method: "POST",
body: data,
headers: { "Content-Type": "application/json"
}).then(res => res.json())
.then(resp => {
//do something with returned data
alert(resp) // { message: "hello" }
})
}
服务器.js:
const express = require("express")
const app = express()
const bodyParser = require("body-parser")
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.post("/sendData", (req, res) => {
console.log(req.body.something) // "123"
//return a response to the client side
res.send({ message: "hello" })
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.