ajax提交表单、ajax实现文件上传(multipart/form-data)

1549年前 (2017-02-17)javaScript4362

方式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单

方式二:使用jquery的$.ajax({..}), 支持提交普通表单,但不支持含有文件的复杂表单; ($.post 或 $.get底层用的都是$.ajax)

方式三:使用jquery插件ajaxFileUpload.js, 支持上传文件,但不支持提交表单

方式四:使用jquery.from.js,支持提交同时含有文件和普通数据的复杂表单

个人四种都用过, 更好喜欢第二种和第四种; 用第二种来解决ajax普通请求, 用第四种来解决文件上传/表单提交; 不多说,上代码

方式一: from + iframe

Test1.jsp:表单、iframe、提交表单

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
<html>
  <head>
    <title>测试页面1,创建表单、iframe、提交表单</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">  	
	<script type="text/javascript" src="..省略/jquery.1.8.2.min.js"></script>	
	<script>
		$(function(){
				//值得注意的是iframe会维护浏览器的历史,浏览器的后退/前进将根据ifream的访问历史来变化,而非主页面
				$("#btn").click(function(){
					var value = $("#pic").val();
					if(Utils.isEmpty(value)){
						alert("请选择文件");
						return false;
					}
					if(!value.match(/.jpg|.jpeg|.gif|.png|.bmp/i)){ 
						alert("文件格式错误"); 
						return false;
					}
					$("#form0").submit(); 
				});  
		});    
	</script>
  </head>

  <body>         
    <form id="form0" method="post" action="..省略/uploadOrgPic.html" enctype="multipart/form-data" target="hiddenFrame" >
    	上传头像: <input type="file" name="imageVo.image" id="pic" />    
    	          <input type="button" value="提交" id="btn"/>   
    </form>
    <div id="result"></div>
     
    <iframe src="about:bland;" id="hiddenFrame" name="hiddenFrame" style="display:none;" frameborder="0"></iframe> 
  </body>
</html>

 

Test2.jsp:后台处理完成后的跳转页面 (后台处理代码此处就不贴了, 上传文件相信大家都会的)

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>     
    <title>测试页面2,处理结果、返回父页面</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    	
    <script>
             window.onload = function(){
                  if(window.parent != window){           //检查是否存在父窗口
                        var resultDiv= window.parent.document.getElementById("result"); 
                        resultDiv.innerHTML = '因为是测试,所以简单的来这么一句话';
                  }
             }
    </script>
  </head>
  
  <body>  
  </body>
</html>


本文原创,转载必追究版权。

分享给朋友:

相关文章

jquery 操作html元素(及CSS)

jquery 操作html元素(及CSS)

 $("li").addClass("aui-user-view-cell aui-img") ;  //给元素添加样式$('#a1...

MyEclipse 中项目修改SVN的地址

MyEclipse 中项目修改SVN的地址

在工作环境调整时,有的时候SVN服务器的地址需要修改,而正在开发中的项目在Eclipse中有些代码没有提交,此时怎么修改SVN的地址呢?以下有一个简单的办法:一、在MyEclipse中选择Window...

我差不多是个废人了,感觉身体被掏空

林心如跟霍建华都结婚了,滴滴跟优步都在一起了。我们也应该抱住了吧? 终于8月了,超吃点吧,再一咬牙,坚持一下吧,马上秋天到了,就可以又能马上把肥肉藏起来了。 在这里迫不及待教大家一个夏天过后...

office 2010安装、激活、激活工具下载

office 2010安装、激活、激活工具下载

 首先下载好工具包(包括office 2010安装程序、激活工具及Microsoft .NET Framework 4.0),点击工具包下载进行下载;安装好office 2010。如果是wi...

樊山越玲 一周年

樊山越玲 一周年

2015-12-25樊先森:周末有约吗?玲玲:有约,不过也得先以你为主啊。樊先森:昂,这样说我还挺开心的。2015-3-26玲玲:亲爱的,苹果是你买的吗?已经收到了,谢谢老公玲玲:有点小惊喜樊先森:那...

jquery 获取焦点

当文本框或下拉等必填时,如果没有输入就给予提示并使该文本框获得焦点!如果是js,对象.focus()即可。可是如果是jQuery, 这样$("#aa") 返回的就不是DOM对象而是...

评论列表

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。