概述
最近,自己做项目遇到这样一个问题就是在维护项目的时,需要增加新的表单,而在增加新的表单的同时只有一个提交按钮 这就意味着一个按钮要同时提交两个form表单。这个,以前都没有遇到过,于是找google,有两种解决方案(不过没有示例):
1.通过iframe
先让第一个表单提交到该iframe,把第一个表单的target指向iframe的name。再在iframe中通过JavaScript提交第二个表单
2.利用ajax
这个其实很容易理解,即通过form1的特有的onsubmit()提交事件(也可以用onclick()),在js里写ajax把form2通过ajax异步请求到服务器,提交form2,完成两个form的提交。(jsp页面中只有一个提交按钮一个form表单,即form1,而form2不用写在jsp中)
下面讲一下第二种方式提交表单(struts1):
function sureSave(){
var url = 'paramSetup.do?operate=updateParamSetup';
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
alert('保存成功!');
location.reload();
}
function callback() {
if(req.readyState == 4) {
if(req.status == 200) {
var msg = req.responseXML;
//alert(msg);
}
}
}
}
<form name="form1" action="portConfig.do?operate=updateParamSetup2" method="post"
οnsubmit="return sureSave()">
...
<input name="submit" type="submit" value="保存"/>
</form>
这其中有一个小问题,不指定大家有没有发现。就是两个表单是form1开始提交,form2因为是ajax的异步提交,所以会花费一点时间,结果是边提交页面边刷新(location.reload();),提交form2的时候提交和刷新相互交错,最后提交刷新后的网页是没有完全刷新的,这不是我们想要的结果。于是,我想到Java的线程,在form2所对应的anction的显示网页的那个方法中添加:(大家有更好的方法也可以提出交流)
try {
Thread.sleep ( 50 ) ;
} catch (InterruptedException ie){
ie.printStackTrace();
}
也就是说ajax异步访问服务器到返回信息浏览器的时间只要50微秒(因机而异),从中可以看出ajax的速度还是挺快的。
最后
以上就是踏实花卷为你收集整理的提交两个form表单的全部内容,希望文章能够帮你解决提交两个form表单所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复