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编码文本字符串,但不支持文件上传的表单

<script>
    $.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");
        }
    });
</script>

方式三:使用jquery插件ajaxFileUpload.js,该方式提交时无需表单, 也提交不了表单, 只用于文件上传
若在文件上传同时还要传递其它的参数,通过设置data属性即可实现; 但如果需要的参数过多, 则不建议使用这种方式, 个人更倾向于方式四

<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>

方式四:jquery.form.js

<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>
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值