ajax提交表单、ajax实现文件上传

ajax提交表单、ajax实现文件上传,有需要的朋友可以参考下。

方式一:利用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>

方式二:$.ajax({..})

值得注意的是: serialize()可通过序列化表单值,创建URL编码文本字符串,但不支持文件上传的表单

    $.ajax({
            url:你要请求的url链接,      //默认为当前页面url
            aysnc:true,                //是否异步,默认true
            cache: true,               //使用缓存,默认true
            type: "POST",              //请求方式,默认Get
            dataType:‘JSON‘,           //预期服务器返回的数据类型 (若不指定jquery将根据HTTP包MIME信息来判断)
            headers:{‘ClientCallMode‘:‘ajax‘}, //添加头部,也可通过beforeSend函数添加
            data:$(‘#formid‘).serialize(),    //要发送的数据,将自动转换为请求字符串格式。 此处为表单序列化后生成的字符串
            success: function(data) {  //执行成功的回调函数
                alert("success");
            },
            error: function(request) { //执行错误的回调函数(包含三个参数:XMLHttrRequest、错误信息、捕获的异常对象)
                alert("error");
            }
    });

方式三:使用jquery插件ajaxFileUpload.js,该方式提交时无需表单, 也提交不了表单, 只用于文件上传

若在文件上传同时还要传递其它的参数,通过设置data属性即可实现; 但如果需要的参数过多, 则不建议使用这种方式, 个人更倾向于方式四

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>ajaxFileUpload上传文件</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.js"></script>
	<script type="text/javascript" src="..省略/ajaxfileupload.js"></script>
	<script>
		$("#uploadFile").click(function(){
			var value = $("#imageInput").val();
			if(Utils.isEmpty(value)){
				alert("请选择文件");
				return false;
			}
			if(!value.match(/.jpg|.jpeg|.gif|.png|.bmp/i)){
				alert("文件格式错误");
				return false;
			}

			$.ajaxFileUpload({
				 url:‘url‘,
                 secureuri:false,  	//是否启用安全提交,默认false
                 dataType:‘JSON‘,  //预期服务器返回的数据类型
                 fileElementId:‘imageInput‘, //文件域id值
                 data:{‘name‘:‘abc‘}, 		 //其它参数
                 success:function(data,status){
					 alert(data);
                 },
                 error:function(data,status,_exception){
                	 alert(_exception);
                 }
			});
		});
	</script>
  </head>

  <body>
            姓名: <input type="text" name="name"/><br/>
 	上传头像: <input type="file" id="imageInput" name="imageVo.image"/>
 	          <input type="button" value="上传" id="uploadFile"/>
  </body>
</html>

方式四:jquery.form.js

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
	<title>ajax上传头像</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 type="text/javascript"	src="jquery.form.js"></script>
    </head>

    <body>
         <!-- 包含文件和普通数据的表单 -->      
         <form id="form0" method="post" action="" enctype="multipart/form-data">
              姓名: <input type="text" name="userInfo.userName" autocomplete="off"/>
              头像: <input type="file" name="imageVo.image" id="pic" />    
                   <input type="button" value="提交" onclick="ajaxSubmitForm();"/>   
         </form>
    </body>
    <script>
        function ajaxSubmitForm() {
            var value = $("#pic").val();
            if (Utils.isEmpty(value)) {
                alert("请先选择文件");
                return false;
            }
            if (!value.match(/.jpg|.jpeg|.gif|.png|.bmp/i)) {
                alert("文件格式错误");
                return false;
            }
            var option = {
                url : ‘..省略/uploadOrgPic.ac‘,
                type : ‘POST‘,
                dataType : ‘json‘,
                headers : {"ClientCallMode" : "ajax"}, //添加请求头部
                success : function(data) {
                    alert(JSON.stringify(data));
                },
                error: function(data) {
                    alert(JSON.stringify(data) + "--上传失败,请刷新后重试");
                }
             };
            $("#form0").ajaxSubmit(option);
            return false; //最好返回false,因为如果按钮类型是submit,则表单自己又会提交一次;返回false阻止表单再次提交
        }
     </script>
</html>
时间: 2024-10-07 18:49:51

ajax提交表单、ajax实现文件上传的相关文章

Ajax 提交表单【包括文件上传】

利用js插件实现 <script src="@Url.Content("~/js/layer/jquery.form.min.js")"></script> 实例代码 前端: @using WebSearch.EFDB; @{ ViewBag.Title = "UploadFeeCertificate"; NoveltyProxy proxy = ViewData["Proxy"] as Novelty

通过jQuery Ajax提交表单数据时同时上传附件

1.使用场景:需要使用ajax提交表单,但是提交的表单里含有附件上传 2.代码实现方式: <!-- HTML代码 --> <form method="post" action="" enctype="multipart/form-data" id="J-add-form"> <input type="file" name="qr_code" /> &l

form表单系列中文件上传及预览

文件上传及预览 Form提交 Ajax 上传文件 时机: 如果发送的[文件]:->iframe, jQurey(),伪Ajax 预览 import os img_path = os.path.join('static/img', fafafa.name) with open(img.path, 'wb') as f: for item in fafafa.chunks(): f.write(item) function iframeSubmit(){ $('#ifm1').load(functi

WebApi发送HTML表单数据:文件上传与多部分MIME

5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/2826230.html By Mike Wasson|June 21, 2012作者:Mike Wasson | 日期:2012-6-21 Part 2: File Upload and Multipart MIME第2部分:文件上传与多部分MIME This tutorial shows how to

(转)WebApi发送HTML表单数据:文件上传与多部分MIME

5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/2826230.html By Mike Wasson|June 21, 2012作者:Mike Wasson | 日期:2012-6-21 Part 2: File Upload and Multipart MIME第2部分:文件上传与多部分MIME This tutorial shows how to

form表单的file文件上传那些事

file API 客户端直接访问用户计算机的文件,2000以前,在表单添加了<input type="file">字段. file API是为給web开发提供安全的方式,以便在客户端更好访问用户的文件,字段的基础上加 了一些直接访问文件信息的接口-files集合.与fileReader类型读取文件的数据. files集合 name: 本地文件的名称 size: 文件的字节大小 type: 字符.文件的MIME类型 lastModifiedDate: 文件上次修改的时间(ch

MVC中ajax提交表单示例

页面中: @using (Ajax.BeginForm("Login", "User", new AjaxOptions() { HttpMethod = "post", OnSuccess = "afterOk" })) { <input ...一些表单 <input type="checkbox" id="ckbrecord" name="ckbrecord&q

JQuery ajax提交表单及表单验证

JQuery ajax提交表单及表单验证 博客分类: jsp/html/javascript/ajax/development Kit 开源项目 注:经过验证,formValidator只适合一个页面不超过一个表单的情况. 本例实现功能:通过ajax提交表单,并在提交表单前对表单的数据进行验证. 主要通过两个插件实现: 第一个: jQuery Form Plugin http://jquery.malsup.com/form 主要功能是ajax提交表单 第二个:jQuery formValida

ajax提交表单

ajax提交表单在项目中常用,前台无论是简单的html.jsp或者是使用了easyui框架,提交表单都会使用到ajax,extjs框架其实也是使用了ajax只不过对其进行了封装了,我们使用的时候就更固定了些. 总的来说ajax提交表单可以分为两种,一种是无返回结果的,就是将表单数据提交给后台,后台处理完就完了:另一种就是有返回结果的,后台执行成功或失败的信息需要返回到前台. 1,无返回结果的 最简单的就是$("#formid").submit();直接将form表单提交到后台. 2,有