html使用iframe实现伪异步表单,实现无刷新上传文件时遇到的问题

html使用iframe实现伪异步表单,实现无刷新上传文件时遇到的问题

 

 

最近发现原有老系统框架只支持对单表单(单form)的数据进行提交处理,不支持多个表单一起提交处理。于是,我打算改造原有的系统框架,从而支持多表单数据提交处理,其中包含了多表单(多form)的文件上传

 

由于最初是一个form,而现在想要提交多份数据,所以自然想到了在form里面使用循环,输出多份div,每份div里面都有同名(name)但不同idinput元素,这样就可以在sever端的action接收到数组结构的提交数据,方便处理。将页面设为mine.jsp

 

由于原先是有提交图片这个操作的,图片之前是跟着表单一起提交的,但是现在不行,需要异步提交图片,从而实现多个图片可以各自被预览的功能。

 

最先的思路是想使用form表单提交,即在form当中嵌套form。后来发现不行,发现每次都是第一个嵌套的form中的提交图片的按钮提交失败,传不上文件。并且仔细检查后发现后面嵌套的form则可以提交。这是一个bug

 

由于直接提交form表单是会刷新页面的,我现在不希望刷新页面,我需要异步上传图片文件。所以在网上找了一些插件,来尝试,比如uploadifyjquery.ajax.upload,后来发现都有各种各样的问题,比如syntax error等。

 

后来得知,htmlform是不允许嵌套的,这就是导致第一个嵌套的form中的提交图片的按钮提交失败的原因。

 

此时我又从网上查到可以html通过使用iframe实现伪异步表单,实现无刷新上传文件。一份简单示例如下:

 

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

<title>无刷新提交表单</title>

<script type="text/javascript">

<!--

function callback(str){

alert(str);

}

 

// --></script>

</head>

<body>

<form name="form1" method="POST" action="你的action"target="post_frame" enctype="multipart/form-data">

<iframe name='post_frame' id="post_frame"style="display:none;"mce_style="display:none;"></iframe>

<input type="file" name="img" />

<input name="power[]" type="text"/>

<input type="submit" value="完成以上修改" name="submit"/>

</form>

</body>

</html>

 

这里通过提交数据到iframe这个target里面去从而实现了无刷新提交。不过此时form还是嵌套的,所以第一个嵌套的form还是会刷新页面。

 

我又想到了用iframe来装上面这段代码,这样就不会发生form嵌套了,设为upload.jsp

 

尝试后发现所有里层的form都不会刷新主页面了,从而实现了无刷新提交文件。

 

这里我没有再尝试之前提到的插件,如uploadifyjquery.ajax.upload,所以我无法确定是不是之前是因为form嵌套导致插件出问题。

 

或许有人会问,iframe提交后,怎么返回数据?

 

答案很简单,如果你是使用struts2action,只要在执行完action的方法后跳转到某个页面,比如output.jsp,再在里面获取action返回的数据即可,根据这些数据来控制output.jspjs代码,通过js去控制父父元素(当前output.jsp的父元素(即upload.jsp)的父元素(即mine.jsp))即可。

 

这样就解决了上述问题。

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值