如何每 n 分钟使用数据更新一次 Web 应用程序
How to update web application with data every n minutes
我想创建一个显示来自公共 API 的数据的 Web 应用程序。 我将使用 d3(一个 JavaScript 数据可视化库(。 我想每十分钟从 api 检索一次数据,并更新我的页面(比如说是流量或其他什么(。 我没有构建很多 Web 应用程序,如何获取更新?
客户端的js是否应该使用计时器从我的应用程序的服务器端请求更新(也许应用程序是用Rails或node.js编写的(。 然后服务器进行 api 调用并异步发送响应? 这叫套接字吗? 我读过HTML5提供套接字。
或者,也许是 AJAX 请求?
或者,我的应用程序的服务器端是否创建一个计时器,进行 api 调用,然后将更新"推送"到视图。 这对我来说似乎是错误的,此应用程序中可能还有其他视图,并且服务器不必跟踪哪个视图处于活动状态。
这种类型的 Web 应用程序是否有标准模式?非常感谢任何示例或教程。
AJAX 请求 (XMLHttpRequest( 可能是要走的路。
我这里有一个非常简单的XMLHttpRequest(以Java作为后端(的例子:https://stackoverflow.com/a/18028943/1468130
您可以重新创建后端以接收任何其他服务器端语言的 HTTP GET 请求。只需回显您检索到的任何数据,xmlhttp.onload()
就会捕获它。
根据数据的复杂程度,您可能需要为所选的服务器端语言查找 JSON 库,并将数据序列化为 JSON,然后再将其回显到 JS。然后,您可以使用 JavaScript 的 JSON.parse()
方法将服务器数据转换为客户端脚本可以轻松使用的对象。
如果你使用的是jQuery,它处理AJAX非常顺利,使用$.ajax()
可能比普通的XMLHttpRequest更容易。
http://api.jquery.com/jQuery.ajax/(本页中都有示例,主要集中在底部。
这真的让我很恼火,这么多的AJAX教程是多么复杂。至少使用jQuery,这很容易。
基本上,你只需要向脚本请求一些东西(发起请求,发送 url 参数(,然后等待脚本给你一些东西(触发你的onload()
或jqxhr.done()
函数,为这些函数提供data
参数(。
对于您的其他问题:
- 使用 JavaScript 的
setTimeout()
或setInterval()
每 600000 毫秒发起一个 AJAX 请求。在请求的onload
回调中,处理数据并相应地更新页面。 - 响应将是异步的。
- 这不是套接字。
- 在这种情况下,"推动"可能不是要走的路。
如果我理解正确并且这个 API 是外部的,那么你的问题可以分为两个单独的子问题:
1( 更新服务器上的数据。服务器应每 N 分钟下载一次数据。因此,它不应连接到客户的 AJAX 调用。如果两个客户同时来到网站,你的服务器会做两个API调用,有什么不对的。
实际上,您应该在服务器上创建一个 CRON 作业,该作业将调用 API 并将其结果存储在服务器上。在这种情况下,您的服务器将始终一次进行一次调用,并缓存相当新的信息。
2( 在客户端更新数据。如果客户浏览器上的数据应该在不刷新页面的情况下更新,那么你应该使用某种 Ajax。它可以每 X 分钟向您的服务器发出一次请求,以获取新数据或使用所谓的长轮询。
我认为实现实时 Web 应用程序的最有效方法是使用 Web 套接字从服务器推送更改,而不是从客户端轮询。这样,一旦服务器通知有新数据可用,用户就可以立即看到更改。您可以在类似的帖子中阅读更多内容。
我尝试使用名为 socket.io 的nodejs包来制作实时虚拟教室。它对我来说效果很好。
- 在Angular应用程序中每个帖子投票一次
- 谷歌图表在运行应用程序时只能显示一次
- 在谷歌应用程序脚本中,如何在满足条件的情况下只发送一次电子邮件
- 您可以在节点.js上一次运行多个应用程序吗?
- iOS cordova应用程序中的文本区域只接受一次输入
- 在单页web应用程序中一次只显示特定的表单
- 页面上有两个jQuery应用程序,一次只能运行一个
- 如何每 n 分钟使用数据更新一次 Web 应用程序
- AngularJS应用程序为多个控制器加载和处理一次JSON数据
- 煎茶一次应用一组过滤器
- 将移动用户重定向到应用程序下载一次
- "一页应用程序“;DOM操作而不是AngularJS
- 为什么一个ng应用程序一次工作
- 一次应用多个翻译
- 同一页面上有两个棱角分明的应用程序-一次只能使用一个
- 单页网页应用程序;一次加载所有模板
- 如何通过javascript在web应用程序中全局记录每个dom节点一次的点击
- 混合应用程序使用phoneGap录制视频,每10分钟分裂一次
- Firebase注册一次,登录不同的应用程序
- 在jquery中,聊天应用程序不会每10秒加载一次