请教在JSP页面先后提交两个form,总是出错的原因

因为JSP和Servlet、biz文件已经写好并运行了一段时间了,现在根据领导需要,要把网页上提交的数据的扫描件作为附件也提交到数据库(mssql server 2000)。
我不想对原来的文件作太大的修改,于是另外建立了一个document数据表。
在原来的JSP页面上先提交了原来的普通的form1,然后提交含有大文件(可能是Word、Excel或者jpg文件)的form2。
提交是在中做的。代码如下:
[code="ruby"]
form1.submit();
form2.submit();
[/code]
因为form2要从form1的Servlet的运行结果中取得数据(form1运行后的结果放到session中),所以form2必须在form1.submit()后面运行。
但提交到Servlet之后的结果却非常混乱、随机。有时干脆就不提交form1,有时提交了form1到Servlet之后,却只运行servlet开头的一两行代码,然后就提交Form2,运行form2的Servlet,运行完之后,再运行form1的余下的Servlet的代码。
搞了几天都解决不了。后来在QQ上问同学,有回复说可能是“同步”的问题,提交的两个表单同时提交了。
于是我在form2.submit();前面加上alert("在这里。");问题立刻得到解决。但这样运行很不方便、科学。
于是我又把alert("在这里。");改为setTimeout("form2.submit()",2000);
居然毫无作用。
现在改为:
[code="ruby"]
function submitForm1(){
form1.submit();
setTimeout("",1000);
submitForm2();
}
fucntion submitForm2(){
form2.submit();
}
就可以正常提交了。
但setTimeout("",1000);改为setTimeout("",5000);
居然又运行不了了。请问这是什么原因呢?
是不是几个form提交的时候,都是同时提交的呢?我应该怎么写才能正常地提交这两个form呢?
谢谢。
[b]问题补充:[/b]
请问lovewhzlq,setTimeout("(function(){})()",5000);中的"(function(){})()"是什么意思?
我还是想弄清楚到底是什么原因造成的运行错误,是不是就是同步的问题?

我觉得你这样设计有问题。你form2提交要依赖form1的提交。如果不做特别处理的话,就像说的form2很可能比form1先处理,这依赖一定会出问题。你要是故意设置一个延迟,那和两个同时提交(就是合成一个大的Form),然后在服务器端进行相关处理,这样多方便! 我就不知道你为什么要设计成两个form,如果你把这个问题说清楚,我相信,可能大家会给出更好的意见。

改为setTimeout("(function(){})()",5000);

用setTimeout总归不保险

你第一个submit后,提交到一个iframe,然后在iframe里面在调用第2个

使用AJAX中的同步请求,
在FORM提交成功后,返回操作结果,
再根据结果提交FORM2

result = form1.submit();
如果result=success
则form2.submit();

几个form提交的时候,当然都是同时提交的

两个form提交,但却在一个页面里,后台只处理一个post请求,当然就会出问题

[size=medium]服务器不管你那个先来的那个后来的,反正那接到一个就处理一个。在前台更是这样,并不是你先提交那个他就先请求的服务器,不信你可以写一段程序测试一下。

办法倒是有如果你的第二次提交必须要依赖于第一次提交你就在第一次提交成功的时候跳到一个新的页面。或是想她们说的弄一个iframe也行。在第二个页面上在做自动提交就行了。[/size] :)