前端显示后端处理进度的简单实现

有时候前端向后端发送一个请求,后端处理的过程稍微有点长,为了增强用户体验,可以在前端用一个进度条显示后端的处理进程。简单实现方法。

思路:

  • 前端使用setInterval()函数,设置每隔几秒向后端发送一次请求,这个请求就是请求后端的处理进程。
  • 然后再创建一个ajax请求,向后端请求数据,请求成功之后将setInterval()函数停止
  • 后端有两个方法,对应两个url请求,一个处理数据的请求,一个处理进程的请求
  • 通过全局变量的形式,设定进程的进行。处理进程的请求方法就是把全局变量传给前端

大致思路就在上面,可以实现简单的进程显示。

具体代码:

前端使用的是nanobar进度条插件,关于它的使用和介绍可以参考我的上一篇博客===>
轻量级nanobar进度条插件的介绍和使用

后端使用的是Java语言的Struts2框架,其他语言或者框架道理类似

前端js代码

//每隔一秒查询进度
    var intelval=setInterval(function () {

        //执行ajax
        $.ajax({
            url:"image_progress.action",
            dataType:"text",
            type:"post",
            success:function (data) {
                $("#tips").html("正在分析,请稍等...");
                $(".nanobar").fadeIn();
                //显示进度
                nanobar.go(data);
            }
        })
    },1000);


    //发送Ajax请求,将图片传给服务器
    var formData = new FormData();
    formData.append("upload",file);
    $.ajax({
        url:"image_upload.action",
        data:formData,
        dataType:"json",
        type:"post",
        contentType: false,
        processData: false,

        success:function (data) {
            //结束后台进度查询
            clearInterval(intelval);
            nanobar.go(100);
            $("#tips").html("");
            $(".nanobar").fadeOut();
            //显示分析结果
            $("#result").html(data.value);
        }
    })
});

后端Java代码

	//定义一个全局变量,用来接受显示进度
    private static Integer global=0;
public String upload() {

	global=0;
			
        //处理上传的文件
        	.......

        global=30;

        ......(处理逻辑)


        //数据返回给前端
        	......
           	
        //重置全局变量
        global=0;
        
        }

        return null;
    }
//返回全局变量,显示进度
 public String progress() throws IOException {

	//自己定义,设置进度,根据处理速度判断
        if(global>=30&&global<95){
            global=global+5;
        }
        
        
	//数据返回给前端
        	......(返回global)

        return null;
    }

最终效果:
在这里插入图片描述

只是简单实现了一下,还有很多地方可以优化的

比如多用户同时使用的并发问题等

  • 11
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在Flask中实现前端实时显示后端处理进度可以通过使用WebSocket技术来实现。WebSocket是一种基于TCP的协议,可以实现双向通信,使得前后端能够在同一个连接上进行实时的数据交换。 首先,我们需要在Flask中使用WebSocket,可以使用Flask-SocketIO来方便地实现WebSocket功能。安装Flask-SocketIO后,我们可以在Flask应用中使用socketio对象来实现WebSocket的功能。 在后端代码中,我们可以通过在任务处理函数中发送进度信息给前端。例如,我们可以在任务处理函数的循环中,使用socketio的emit函数发送当前任务的进度信息。前端页面将通过监听WebSocket消息的方式接收进度信息。 在前端代码中,我们需要在页面中引入SocketIO的JavaScript库,并创建一个SocketIO对象。然后,我们可以使用socket.on()函数来监听后端发送的进度信息,并根据接收到的进度信息来更新前端页面上的进度显示。 需要注意的是,为了防止过多的WebSocket连接导致性能问题,我们可以考虑使用Flask-SocketIO提供的命名空间和房间功能。通过使用命名空间和房间,我们可以将客户端分组,只向特定的客户端发送进度信息。 总结起来,实现Flask和前端实时显示后端处理进度的关键步骤是:在Flask应用中使用Flask-SocketIO实现WebSocket功能,后端任务处理函数中使用socketio对象发送进度信息,前端页面中使用SocketIO对象监听进度信息并更新页面显示。这样就能够实现前端实时显示后端处理进度的功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值