使用JavaScript进行服务器轮询

26

如何使用JavaScript定期向服务器发出请求以快速刷新数据?我在前端使用jQuery,后端使用Java Spring Framework。

示例包括需要快速更新的项目列表(每秒钟更新一次)。


1
定义非常快速。一分钟一次?十秒钟一次?每秒一次?什么类型的数据? - Pekka
每1秒钟会传输一些数据,可能包含少量文本和HTML。 - newbie
3个回答

41

您可能想使用jQuery的Ajax函数每秒钟轮询服务器。然后,服务器可以在几乎实时地向浏览器发送指令。

您还可以考虑使用长轮询而不是上述方法,以降低延迟而不增加轮询频率。

引用Comet Daily:长轮询技术:

长轮询Comet技术是一种优化传统轮询以减少延迟的技术。

传统轮询以固定间隔向服务器发送XMLHttpRequest。例如,每15秒打开一个新的XMLHttpRequest,接收即时响应,然后关闭连接。

长轮询发送请求到服务器,但是直到有响应可用才将其返回给客户端。一旦连接关闭,无论是由于客户端收到响应还是请求超时,都会启动新的连接。结果是显着降低延迟,因为当服务器准备好返回信息返回到客户端时,通常已经建立了连接。

除以上内容外,我还建议您查看以下Stack Overflow帖子的被接受答案,以获取有关长轮询技术的详细描述:


3

截至2018年,您应该使用具有Promise语法的fetch函数:

<script type="text/javascript">
setInterval(function(){
  fetch("your_serverside_script.php") // Any output from the script will go to the "result" div
  .then(response => response.text())
  .catch(error => document.getElementById("result").innerHTML = error)
  .then(response => document.getElementById("result").innerHTML = response)
}, 1000); // Poll every 1000ms
</script>

<div id="result">result will appear here</div>

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接