一个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多分钟完成后,再行操作。
}