Javascript 如何使用Ajax和MVC更新progressbar
作为JSP的新手,我正在努力让我的头脑了解一些事情。目前,我正在尝试创建一个页面,显示服务器上运行的任务的进度。我有一个未定义的运行任务的nr,我想在我的jsp页面上显示这些任务。我目前有一个工作解决方案,但“任务”div每3秒更新一次,这意味着条形图动画将重新启动,有时窗格会“闪烁” 有没有一种不需要覆盖所有html任务的非黑客方法 主要JSP:Javascript 如何使用Ajax和MVC更新progressbar,javascript,java,ajax,jsp,spring-mvc,Javascript,Java,Ajax,Jsp,Spring Mvc,作为JSP的新手,我正在努力让我的头脑了解一些事情。目前,我正在尝试创建一个页面,显示服务器上运行的任务的进度。我有一个未定义的运行任务的nr,我想在我的jsp页面上显示这些任务。我目前有一个工作解决方案,但“任务”div每3秒更新一次,这意味着条形图动画将重新启动,有时窗格会“闪烁” 有没有一种不需要覆盖所有html任务的非黑客方法 主要JSP: <div id="tasks"></div> .... <script> (function worker()
<div id="tasks"></div>
....
<script>
(function worker() {
$.ajax({
url : '/tasks/update_tasks',
success : function(data) {
$('#tasks').html(data);
},
complete : function() {
setTimeout(worker, 3000);
}
});
})();
我不会在每次调用时检索任务列表并替换它们,而是更新它们的状态。您可以向控制器添加一个方法,该方法将任务列表作为JSON对象返回,然后(使用JQuery)遍历进度条并相应地更新百分比。我只更新它们的状态,而不是检索任务列表并在每次调用时替换它们。您可以向控制器添加一个方法,该方法将任务列表作为JSON对象返回,然后迭代进度条(使用JQuery)并相应地更新百分比。
<body>
<c:forEach var="task" items="${tasklist}">
<h3>${task.name}</h3>
<div class="progress">
<div
class="progress-bar progress-bar-success progress-bar-striped active"
role="progressbar" aria-valuenow="${task.currentProgress}"
aria-valuemin="0" aria-valuemax="100"
style="width: ${task.currentProgress}%">${task.currentProgress}%</div>
</div>
</c:forEach>
@RequestMapping(value="/tasks/update_tasks",method = RequestMethod.GET)
public ModelAndView retrieveUpdate() {
ModelAndView modelAndView = new ModelAndView("/tasks/update_tasks");
logger.debug("update tasks");
//tasklist is an ArrayList<TaskBean>
modelAndView.getModel().put("tasklist", tasksService.getTaskList());
return modelAndView;
}
public class TaskBean {
private String name;
private String customerId;
private int currentProgress;
public TaskBean()
{
currentProgress = 0;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public int getCurrentProgress() {
return currentProgress;
}
public void setCurrentProgress(int currentProgress) {
this.currentProgress = currentProgress;
}
}