利用formdata自动序列化和xhr上传表单到后端

//FormData对象是XMLHTTPRequest level2新增的类型,它可以自动序列化表单内容,不再需要我们去写序列化表单方法;
FormData()即可以直接把整个表单给它,也可以分别使用append(‘字段’,‘值’)方法给FormData();
现在就结合xhr写一个简单示例,怎么把表单传递给后端

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
        <title>测试xhr和formdata</title>
    </head>
    <body>
        <div id="regform">
            <form id="regniter" name="reg" method="post" action="">
                <label>
                    <div class="inputStyle">
                        用户名:<input type="text" name="username" value=""/>
                    </div>
                    
                </label>
                
                <label>
                    <div class="inputStyle">&emsp;码:<input type="password" name="pwd" value=""/>
                    </div>    
                </label>
                <label>
                    <div class="inputStyle">
                        <input type="button" name="submit1" value="提交"/>
                    </div>
                </label>
            </form>
        </div>
        <script>
            let btn=document.getElementsByName("submit1");
            btn[0].addEventListener("click",function(){
                let xhr=new XMLHttpRequest();
                xhr.onreadystatechange=function(){
                    if(xhr.readyState===4)
                    {
                        try{
                                if((xhr.status>=200&& xhr.status<300) || xhr.status===304)
                            {
                            //获取从后端返回的数据
                                let dataarr=JSON.parse(xhr.response);

                                console.log(dataarr);
                                
                            }else
                            {
                                console.log("连接后端不成功:",xhr.status);
                            }
                        }catch(ex)
                        {
                            xhr.ontimeout=function(){
                                alert('连接超时');
                            };
                        }
                        
                    }
                };
                xhr.open("post","regniter.php");
                let form1=document.forms[0];
                
                let username=form1.elements['username'].value;
                let pwd=form1.elements['pwd'].value;
                //设置超时为5秒
                xhr.timeout=5000;
                //设置重写xhr响应的mime类型,这里是json类型,也可以写成application/json形式
                xhr.overrideMimeType("text/json");
                if(username!=="" && pwd!=="")
                {
                    let data=new FormData(form1);
                    
                    xhr.send(data);
					/*
					这里是单独设置字段/值,效果和上面是一样的
					data.append('username')=username;
					data.append('pwd)=pwd;
					xhr.send(data);
					*/
                    form1.elements['submit1'].disabled=true;

                    console.log('已经发送');
                }
                
            })
            
        </script>
    </body>
</html>

//这里是后端处理

if(isset($_POST['username'])&&isset($_POST['pwd']))
{
    $regArr=[];
    $regArr['username']=$_POST['username'];
    $regArr['pwd']=$_POST['pwd'];
    //注意:这里不能用return,即使是文本也不能用return,不然前端收到是空白 
    echo json_encode($regArr);
}else
{
    echo 'no';
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面提供一个完整的 Spring Boot + Ajax 图片上传的案例: 1. 首先在前端编写一个用于上传图片的表单,例如: ```html <form id="uploadForm"> <input type="file" name="file" id="fileInput"> <button type="submit" id="submitBtn">上传</button> </form> ``` 其中 `file` 是文件上传的参数名,`submitBtn` 是触发上传动作的按钮。 2. 在 JavaScript 中使用 Ajax 发送请求,将图片数据发送至后端,可以使用 FormData 对象来进行封装: ```javascript $("#uploadForm").submit(function(e) { e.preventDefault(); var formData = new FormData(); formData.append("file", $("#fileInput")[0].files[0]); $.ajax({ url: "/upload", type: "POST", data: formData, processData: false, contentType: false, success: function(response) { alert("上传成功!"); }, error: function(xhr, status, error) { alert("上传失败:" + error); } }); }); ``` 其中 `formData.append("file", $("#fileInput")[0].files[0])` 表示将选中的文件添加到 FormData 对象中,`processData: false` 和 `contentType: false` 表示不对数据进行序列化和修改请求头。 3. 在后端编写接收图片的控制器,例如: ```java @RestController public class UploadController { @PostMapping("/upload") public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) { try { // 保存文件到本地或者其他服务器 // ... return ResponseEntity.ok("上传成功!"); } catch (IOException e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("上传失败:" + e.getMessage()); } } } ``` 其中 `@PostMapping("/upload")` 表示这个控制器方法接收 POST 请求并处理 `/upload` 路径的请求,`@RequestParam("file")` 表示接收名为 `file` 的文件参数。 4. 最后启动 Spring Boot 应用,访问前端页面即可进行图片上传。成功上传后,会在后端保存图片并返回上传成功的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值