当前位置: 代码迷 >> J2EE >> 一个jsp页面透过一个按钮触发一个后台任务
  详细解决方案

一个jsp页面透过一个按钮触发一个后台任务

热度:40   发布时间:2016-04-17 23:13:52.0
一个jsp页面通过一个按钮触发一个后台任务,
本帖最后由 LBXX_64 于 2015-04-20 17:56:21 编辑
一个jsp页面通过一个按钮触发一个后台任务,这个任务可能要执行10几分钟,我想让用户在这段时间可以做其他的事情,反正就是不要傻等着,于是我弹出一个dialog提示框,然后ajax去后台执行任务,但是框没弹出来,页面也啥都点击不了

排除多线程解决方法


<a onclick="go();" class="easyui-linkbutton" data-options="iconCls:'icon-search'">开始</a>
<div id="view_dialog" title="数据获取" class="easyui-dialog"  
data-options="closed:true">  
数据爬取中,可能会耗费一些时间,您可以先做些其他操作
</div>  


<script language="javascript">
function go(){
$('#view_dialog').dialog('open');
$.ajax({
        type: "post",
        url: "<%=request.getContextPath()%>/xx/xx/xx_getData.action",
        dataType: "json",
        async: false,
        success: function (data) {
            if (!data.success) {
                alert("数据获取失败");
            } else {
             alert("数据获取完成");
            }
            $('#view_dialog').dialog('close');
        },
        error: function (textStatus) {
            alert("数据获取失败");
            $('#view_dialog').dialog('close');
        }
    });
}
</script>

------解决思路----------------------
async: true
改为异步调用
------解决思路----------------------
async: false, 改为 async: true,
------解决思路----------------------
 改为 async: true,试试
------解决思路----------------------
ajax分为同步和异步。同步就是等待后后返回数据后,jsp页面再执行相关操作。异步就是不用等后台,该干嘛干嘛。后台数据到了,再调你前台的方式执行。

你async: false表示你用的同步,自然要等后台返回数据了,再执行的弹出框操作。完了你后台执行10多分钟,当然一时半会儿弹不出来了。
你的流程是这要:
function  go(){
   alert("数据爬取中,可能会耗费一些时间,您可以先做些其他操作")
   异步ajax请求(包含你回调的方法)........
}

function  回调的方法(){
    后台执行10多分钟完成后,再行操作。
}
  相关解决方案