ajax无刷新表单信息提交

1. 收集表单信息

利用新技术FormData表单数据对象可以实现快速收集表单信息。

FormData是html5的新技术,在主流浏览器都可以正常使用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        window.onload = function () {
            var fm = document.getElementsByTagName('form')[0];
            fm.onsubmit = function () {
                //利用formData快速收集表单
                var fd = new FormData(fm);

                var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function () {
                    if(xhr.readyState == 4){
                        alert(xhr.responseText);
                    }
                }
                xhr.open('post', './04.php');
                xhr.send(fd);
                return false; //阻止提交
            }
        }
    </script>
    <style type="text/css">

    </style>
</head>
<body>
    <h2>ajax + javascript + form 实现无刷新表单信息提交</h2>
    <form method="post" action="">
        <p>用户名:<input type="text" name="username" id="username" /></p>
        <p>密码:<input type="password" name="password" id="password" /></p>
        <p>邮箱:<input type="text" name="email" id="email" /></p>
        <p><input type="submit" value="注册" /></p>
    </form>
</body>
</html>
效果图:



2、ajax实现文件上传

<form  enctype=”multipart/form-data”>

<input  type=”file”>

服务器端:$_FILES接收附件信息(name/error/size/type/tmp_name)

move_uploaded_file(临时附件,真实附件路径名);

 

$_FILES   中的error字段意思

0->ok

1->大小超过php.ini限制

2->大小超过MAX_FILE_SIZE

3->附件只上传了一部分(不完整)

4->没有上传附件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        window.onload = function () {
            var fm = document.getElementsByTagName('form')[0];
            fm.onsubmit = function () {
                //利用formData快速收集表单
                var fd = new FormData(fm);

                var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function () {
                    if(xhr.readyState == 4){
                        alert(xhr.responseText);
                    }
                }
                xhr.open('post', './05.php');
                xhr.send(fd);
                return false; //阻止提交
            }
        }
    </script>
    <style type="text/css">

    </style>
</head>
<body>
    <h2>ajax + javascript + formData 实现无刷新文件上传</h2>
    <form method="post" action="">
        <p>用户名:<input type="text" name="username" id="username" /></p>
        <p>密码:<input type="password" name="password" id="password" /></p>
        <p>邮箱:<input type="text" name="email" /></p>
        <p>头像:<input type="file" name="img" /></p>
        <p><input type="submit" value="注册" /></p>
    </form>
</body>
</html>

<?php
if($_FILES['img']['error'] > 0){
    exit('上传附件有问题,有可能没有附件');
}
$path = "./upload/";
$name = $_FILES['img']['name'];
//附件上传逻辑
if(move_uploaded_file($_FILES['img']['tmp_name'], $path.$name)){
    echo 'success';
} else {
    echo 'fail';
}
效果图:



2.1 使用FormData注意:

① 每个表单域必须有name属性

② form标签里边无需设置enctype=multipart/form-data属性(即时有上传域)

③ ajax传递FormData的数据不需要设置setRequestHeader()函数


3. 上传大附件进度条设置

接收php代码

<?php
if($_FILES['img']['error'] > 0){
    exit('上传附件有问题,有可能没有附件');
}
$name = $_FILES['img']['name'];
$name = iconv('UTF-8', 'GB2312', $name);
$path = "./upload/";

//附件上传逻辑
if(move_uploaded_file($_FILES['img']['tmp_name'], $path.$name)){
    echo 'success';
} else {
    echo 'fail';
}

显示代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        window.onload = function () {
            var fm = document.getElementsByTagName('form')[0];
            fm.onsubmit = function () {
                //利用formData快速收集表单
                var fd = new FormData(fm);

                var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function () {
                    if(xhr.readyState == 4){
                        alert(xhr.responseText);
                    }
                }
                
                //设置监听事件
                xhr.upload.onprogress = function (evt) {
                    var loaded = evt.loaded;
                    var total = evt.total;
                    var per = Math.floor((loaded/total)*100)+"%";
                    document.getElementById('son').innerHTML = per;
                    document.getElementById('son').style.width = per;
                } 
                
                xhr.open('post', './06.php');
                xhr.send(fd);
                return false; //阻止提交
            }
        }
    </script>
    <style type="text/css">
        #pat {
            width: 430px;
            height: 40px;
            border:5px solid blue;
        }
        #son {
            width: 0%;
            height: 100%;
            background-color: lightblue;
        }
    </style>
</head>
<body>
    <h2>ajax + javascript + formData 实现无刷新文件上传</h2>
    <form method="post" action="">
        <p>用户名:<input type="text" name="username" id="username" /></p>
        <p>密码:<input type="password" name="password" id="password" /></p>
        <p>邮箱:<input type="text" name="email" /></p>
        <div id="pat"><div id="son"></div></div>
        <p>头像:<input type="file" name="img" /></p>
        <p><input type="submit" value="注册" /></p>
    </form>
</body>
</html>
效果图:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值