我的test.jsp页面内容如下:
[code="jsp"]
<%
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
%>
function createXmlHttpObj() { var xmlHttp = false; try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { xmlHttp = false; } } if (!xmlHttp && typeof XMLHttpRequest != "undefined") { xmlHttp = new XMLHttpRequest(); } return xmlHttp; //保持session不超时,每隔指定秒数数进行一次ajax访问页面 function keepSessionNotTimeOut(pointedSecond){ var __xmlHttp = createXmlHttpObj(); var __url='<%=basePath%>/common/index/blank.jsp'; //我在此页面已经有打印,访问没问题 var id=window.setInterval(function (){ __xmlHttp.open('get',__url,true); __xmlHttp.send(null); },pointedSecond*1000); } keepSessionNotTimeOut(1); function scan(){ var txt='<xml><id="23"></xml>' var retValue = CltObj.DocsNewCCZG(txt,''); //这是扫描空间的显示界面执行发法 //接下来就是我程序对扫描控件返回值retValue 做一些数据库插入 ,以后的代码省略 } }
[/code]
[size=large][b]问题详细:[/b]因为扫描控件界面我可能要操作30分钟以上,甚至要达到3小时,而我设置的SESSION超时是30分钟,首先我不能把SESSION超时设置3个小时。当运行扫描完资料,超过30分钟,当我再拿控件返回的数据进行插入数据库操作,则会提示超时。
[b]我的设想:[/b]执行scan方法的时候,keepSessionNotTimeOut方法一直在进行保持session不超时的ajax提交,这样即便扫描控件使用3小时,也不会因为超时而不能对控件返回的数据进行数据库插入。
[b]实现的糟糕结论:[/b]当我点击“扫描”按钮之后,keepSessionNotTimeOut的发送请求就不会执行,怎么看到没有执行,是我在被请求页面进行的输出得出结果。但是当我,关闭扫描界面,接着执行keepSessionNotTimeOut方法。
请求各位帮忙,怎么实现我的设想?是不是对优先于ActiveXObject对象的执行?这是我的表象结论。[/size]