网页数据如何实现实时刷新?

网页数据如何实现实时刷新?本文仅为学技术而简单举例,后端框架是Django,具体业务逻辑是否合理可以不用管,下方是工作中需要实现的需求。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

来源商业新知网,原标题:精讲网页数据实时刷新实现

本文仅为学技术而简单举例,后端框架是Django,具体业务逻辑是否合理可以不用管,下方是工作中需要实现的需求

自动化程序脚本运行的三种任务状态:

1、未执行  2、执行成功  3、执行失败

任务状态在网页前端实时展示,需要每隔一段时间请求数据库中的状态数据字段为webtask_stu,并返回前端展示

知识图谱,精讲网页数据实时刷新实现

两种思路:

1、前端轮询,每请求一次,建立一次连接,后端返回前端数据一次

具体实现:设置定时器,每隔5s请求后端数据,后端返回数据后渲染前端

2、前端请求只建立一次连接,后端能持续主动向前端推送数据

具体实现:前端通过socket方式向后端建立连接,后端定时查询数据库数据,主动向前端推送,这种优点很明显,可以减少网络请求次数

方式一:Ajax定时请求:

1、前端设置定时器setInterval,定时器里面传ajax请求函数和时间

function get_stu_list(){

 param = {}; $.post(“/web/webtask_stu/”,param,function(data){    var webtask_tu_list = data.webtask_stu;    console.log(webtask_tu_list);    var tr = $(“tbody tr”);   $.each(tr,function (i,ele) {      $(ele).find(“td:eq(4)”).text(webtask_tu_list[i])   });  });};setInterval(get_stu_list,5000);

后端也很简单,查询数据以JSonResponse返回即可

@csrf_exempt

def webtask_stu(request):  webtasks = Webtask.objects.all()  webtask_stu_list = []   for webtask in webtasks:    webtask_stu_list.append(webtask.webtask_stu)    dit = {‘webtask_stu’: webtask_stu_list}    print(webtask_stu_list)   return JsonResponse(dit)

方式二、websocket

效果图如下,后端持续向前端推送数据,前端控制台输出演示

知识图谱,精讲网页数据实时刷新实现

1、前端部分构造socket连接对象,协议就是websocket协议了,不是http协议,所以前面用ws开头

2、windows.loaction.host可以获取域名(包括端口)

3、主要用到的方法如下,具体也可以看注释

socket.onopen : 成功连接

socket.onmessage : 成功获取后端返回的数据,通过jquery渲染后端返回的状态数据实现刷新效果

socket.onclose:连接失效

4、后端返回来是字符串,需要用到JSON.parse转成前端对象

var socket = new WebSocket(“ws:” + window.location.host + “/web/webtask_stu/”);

socket.onopen = function () {    console.log(‘WebSocket open’);//成功连接上Websocket    socket.send(‘adasdasda。。。。’);//发送数据到服务端 }; socket.onmessage = function (e) {    // console.log(‘message: ‘ + e.data);//打印服务端返回的数据     // console.log(typeof (e.data));     console.log(JSON.parse(e.data));     // console.log(typeof (JSON.parse(e.data)));     var webtask_stu_list = JSON.parse(e.data);     var tr = $(“tbody tr”);    $.each(tr,function (i,ele) {      $(ele).find(“td:eq(4)”).text(webtask_stu_list[“webtask_stu”][i])    }); }; socket.onclose=function(e){  console.log(e); socket.close(); //关闭TCP连接 };

后端Django部分:

1、django项目的话安装dwebsocket,pip install dwebsocket ,并在代码中导入

from dwebsocket.decorators import accept_websocket

2、加装饰器@accept_websocket,接收socket请求

3、if request.is_websocket,判断是否是websocket请求是的话执行我们后端的从数据库查询数据的功能

4、通过time.sleep和while循环实现每隔5秒向前端发送数据

4、request.websocket.send(json数据)返回数据到前端,因为这里是json数据格式,所以前端上面要用JSON.parse转对象,

@accept_websocket

def webtask_stu(request):    if request.is_websocket():      while 1:       webtasks = Webtask.objects.all()       webtask_stu_list = []        for webtask in webtasks:         webtask_stu_list.append(webtask.webtask_stu)         dit = {‘webtask_stu’: webtask_stu_list}        time.sleep(5)       request.websocket.send(json.dumps(dit))

两种思路大致如上,实现socket还有其他更高级的api,有兴趣可以网上看看学习。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166623.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 字符串转List<map>「建议收藏」

    字符串转List<map>「建议收藏」List<byte[]>list=newArrayList<>();//近一周水汽热水能Map<String,Object>map=newHashMap<>();map.put(“1”,“A”);map.put(“2”,“B”);map.put(“3”,“C”);Map<String,Object>map2…

    2022年5月15日
    34
  • 计算机启动显示安装程序正在启动服务,安装程序正在启动服务需要多久

    计算机启动显示安装程序正在启动服务,安装程序正在启动服务需要多久大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。安装程序正在启动服务需要多久,这个主要看软件大小,安装完成就会自动运行的,要是系统不断的提示,这个就不一定了,时间可能会很久的,需要耐心等待。程序,香港和台湾对英文procedure的中文翻译,编程语言中的procedure在大陆翻译为“过程”,在港台和其他领域则翻译为“程序”。在大陆于计算机科学、电脑工程、电子工程、电机工程、机…

    2022年6月29日
    72
  • 手动UPX脱壳演示「建议收藏」

    手动UPX脱壳演示「建议收藏」首先,用PEid打开加壳后的程序CrackmeUPX.exe,可以发现使用的是UPX壳。UPX壳是一种比较简单的压缩壳,只需要根据堆栈和寄存器的值进行调试,就能找到程序的正确入口点。当然,如果不怕麻烦的话,也可以全程单步调试,直到出现像正常程序的入口点一样特征的代码,这样就找到了入口点。用我爱激活成功教程版ollydbg打开CrackmeUPX.exe,可以看到第一条指令是pushad,这显…

    2022年7月19日
    25
  • pycharm的安装选项_tomcat环境配置

    pycharm的安装选项_tomcat环境配置pycharm安装以及其环境的配置说明此次我们使用win10系统安装pycharm的64位社区版,并且对Anaconda3中自带的Python3进行环境的配置,如果您没有Anaconda3甚至是没有Python3环境,可以参考Anaconda3安装教程及说明,如果您的pip源未更改,这里推荐您改为使用国内的pip源,这样可以更快的下载组件,方法见修改pip源至国内镜像网站。教程从开始菜单中找到你的AnacondaPrompt并打开…

    2022年8月29日
    2
  • Activity跳转到指定Fragment实例

    Activity跳转到指定Fragment实例最近做的一个项目,突然出现了这个问题,Activity中有四个fragment,分别是first,two,three,four,默认显示的是fragmenta。在开发过程中,first中跳转到另一个Activity,将这个外部Activity命名为B吧…我需要从first中跳转到B中,完成一些设置,然后再从B中的返回按钮回到three,three中也有一个viewpa

    2022年5月20日
    56
  • 华为转移到ios传输中断_社保不转移 重新开户

    华为转移到ios传输中断_社保不转移 重新开户iPhone备份麻烦,大家都知道!到底有多麻烦呢?以小编的经验,大概是折腾一晚上都不一定能顺利完成吧。。。iPhone自带的备份工具iCloud,在有WiFi的情况下可以自动备份,但其不大的免费空间对于大家来说显然不够,需要花高价扩容。另外,如果备份的数据比较多,就会拉慢备份速度,严重影响手机的正常使用。而且,iCloud不够稳定,所以使用过程中很有可能造成数据的丢失!简直不能再糟糕!有…

    2022年9月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号