js可以异步调用后台java方法吗?

追赶追赶! 2017-12-06 10:11:43
这个java方法执行时间很长,大概10分钟+,在前台通过$.post(url,data,funcion(d){}) 的方式调用,所以页面会显示正在处理,整个页面卡10分钟才会得到结果,此时用户不能进行其他操作,如果用户等不耐烦关掉页面那这个java方法执行到半路就会停,得到错误的结果。
我想有没有这样的方式:用户点击处理后,页面那部分显示处理中,页面其他功能还能用,不会卡住,此时得到执行这个java方法的线程ID还是一个什么,反正就是能唯一标示这次操作的东西,后台执行这个java方法就是了,前台页面不等,只是会不停获取这个java方法执行状态(有没有结束),如果结束再在页面显示结果,没结束就在结果展示部分显示处理中 ,但页面其他功能照常用
我这个想法能实现吗?求大神帮忙看看,如果能怎么实现
...全文
295 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你是有用其他ajax和服务器进行通信吧。。要不关闭浏览器不会停止服务器的操作的 除非是上传大文件什么的,数据没发送完毕就关闭了浏览器,数据停止发送服务器端就停止接受了什么的导致报错

Web开发学习资料推荐
javascript客户端图片预览
extjs开发技巧
wren4255 2017-12-06
  • 打赏
  • 举报
回复
同问,帮顶!!!
追赶追赶! 2017-12-06
  • 打赏
  • 举报
回复
我想应该还得记住这个用户的IP,就算用户关掉页面,后台java方法还在运行,如果他再次进入页面,获取他上次java方法的状态,如果还在处理,则用户进入页面就显示仍在处理
a-shitou 2017-12-06
  • 打赏
  • 举报
回复
按照你的想法,我大概写几句代码你看看

public class FunClient
{
private String userid;//用户标识
private String funid;//需要执行的方法标识
private bool funstatus;//方法执行状态

这里是一些其他属性

这里是get,set
}

public class ExcClientFunUtil
{
//存储所有执行方法的对象
public static Vector<FunClient> vector = new Vector<FunClient>();

//添加
public static status vectorAdd(FunClient client)
{
//判断是否有同一用户正在执行的方法
for (int i = 0;i<vector.size();i++) {
if(vector.get(i).userid==client.userid&&vector.get(i).funid==client.funid)
{
//判断状态 已经执行完成或者正在执行 返回你的标记
}
}
//没有找到
vector.add
}

//方法执行完成,这里只在方法执行成功后调用
public static bool vectorFunFinish(FunClient client)
{
//找到执行成功的对象,标记执行完成
//这里如果你的框架支持服务器通知客户端,可以直接通知,像用dwr或者websocket什么的,这样的话这里就完结了
}

//删除,这里只在页面调用,判断方法是否完成,获取状态后同时可以移除 vector里的对象
public static status vectorFunFinish(FunClient client)
{

}

}

class 你的action或者controllerc{
1.调用vectorAdd
2.根据不同情况判断是否启动线程执行方法
启动线程时传入FunClient对象 ,线程结束后调用vectorFunFinish
}
qq_38054119 2017-12-06
  • 打赏
  • 举报
回复
我很好奇,什么方法执行需要10分钟,我猜测可能是你的sql语句执行时间过长吧
qq_38054119 2017-12-06
  • 打赏
  • 举报
回复
这个问题,我也遇到过,最后完美解决了,想知道吗?私信我吧

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧