当前位置: 首页 > news >正文

利用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';
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • github项目-创建一个新分支
  • HarmonyOS Flex布局
  • 【博客搭建 第二篇章】项目中怎么引入其他的 icon
  • NLP——Transfromer 架构详解
  • HarmonyOS鸿蒙应用开发之Text组件的使用
  • gogs的安装和使用(docker)
  • [Bugku] web-CTF靶场系列系列详解⑥!!!
  • Leetcode每日刷题之75. 颜色分类(C++)
  • 搭建AI知识库:打造坚实的团队知识堡垒
  • MySQL —— CRUD
  • LeetCode——3143. 正方形中的最多点数
  • Qt Creator卡顿
  • python开发上位机 - PyCharm环境搭建、安装PyQt5及工具
  • k8s中yaml文件的编写
  • mysql 监控开始时间,结束时间,平均取n个时间点
  • (三)从jvm层面了解线程的启动和停止
  • CentOS7简单部署NFS
  • conda常用的命令
  • DOM的那些事
  • happypack两次报错的问题
  • input实现文字超出省略号功能
  • Java面向对象及其三大特征
  • Linux快速复制或删除大量小文件
  • node和express搭建代理服务器(源码)
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 测试如何在敏捷团队中工作?
  • 类orAPI - 收藏集 - 掘金
  • 使用 Xcode 的 Target 区分开发和生产环境
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​浅谈 Linux 中的 core dump 分析方法
  • #QT(TCP网络编程-服务端)
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (Java入门)学生管理系统
  • (solr系列:一)使用tomcat部署solr服务
  • (笔试题)分解质因式
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)模仿学习-Action数据的模仿
  • (十八)SpringBoot之发送QQ邮件
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • ***利用Ms05002溢出找“肉鸡
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @RequestBody与@ModelAttribute
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [2021 蓝帽杯] One Pointer PHP
  • [BUUCTF 2018]Online Tool(特详解)
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn