Ajax+FormData+javascript实现无刷新表单信息提交


Posted in Javascript onOctober 24, 2016

原理:

dom收集表单信息,利用FormData快速收集表单信息 ,实例化表单数据对象 同时收集fm的表单域信息。

var fd = new FormData(fm); //实例化对象

alert(fd);

fd对象内部有收集的form表单域信息

ajax传递表单信息

1.静态显示页面代码

<!DOCTYPE html >
<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
window.onload = function(){
var fm = document.getElementsByTagName('form')[0];
fm.onsubmit = function(){
//利用FormData实现form表单信息收集
var fd = new FormData(fm);
//fd 内部会把普通表单域 和 上传文件域 的信息都收集
//ajax传递表单信息
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState==4){
alert(xhr.responseText);
}
}
//设置监听事件ajax.upload.onprogress
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','./05.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+FormData实现 无刷新文件上传</h2>
<form method="post" action="" >
<p>用户名:<input type="text" name="username" /></p>
<p>密码:<input type="password" name="password" /></p>
<p>邮箱:<input type="text" name="email" /></p>
<div id="pat"><div id="son"></div></div>
<p>头像:<input type="file" name="user_pic" /></p>
<p><input type="submit" value="注册" /></p>
</form>
</body>
</html>

2.php页面代码

服务器保存附件名字为本身名字

本地文件------>上传(php程序处理)------>服务器

本地文件名字的 字符集 gb2312

php程序的 字符集 utf-8--->gb2312 (在程序里边把utf-8编码的附件名字 转码为 gb2312)服务器的 字符集 gb2312

<?php
//$_FILES['user_pic']['error']
//0->ok 1->大小超过php.ini限制 2->大小超过MAX_FILE_SIZE限制 
//3->附件只上传了一部分(不完整) 4->没有上传附件
if($_FILES['user_pic']['error']>0){
exit('上传附件有问题,有可能没有附件');
}
//服务器保存附件名字为本身名字
//本地文件------>上传(php程序处理)------>服务器
//本地文件名字的 字符集 gb2312
//php程序的 字符集 utf-8--->gb2312
// (在程序里边把utf-8编码的附件名字 转码为 gb2312)
//服务器的 字符集 gb2312
$name = $_FILES['user_pic']['name'];
$name = iconv('UTF-8','GB2312',$name); //$name的编码由utf-8---变为--->gb2312
$path = "./upload/";
//附件上传逻辑
//move_uploaded_file(临时路径名,真实路径名);
if(move_uploaded_file($_FILES['user_pic']['tmp_name'],$path.$name))
echo "success";
else
echo "fail";

下面看下jQuery 将form表单通过ajax实现无刷新提交的实例代码。

代码如下所示:

//将form转换为AJAX提交
  function ajaxSubmit(url,frm,fn){
    var dataPara=getFormJson(frm);
    $.ajax({
      url:url,
      type:"post",
      data:dataPara,
      async:false,
      dataType:'txt',
      success:fn
    });
  }
  //将form中的值转换为键值对
  function getFormJson(frm){
    var o={};
    var a=$(frm).serializeArray();
    $.each(a,function(){
      if(o[this.name]!==undefined){
        if(!o[this.name].push){
          o[this.name]=[o[this.name]];
        }
        o[this.name].push(this.value || '');
      }else{
        o[this.name]=this.value || '';
      }
    });
    return o;
  }
/*
  //前台调用方式
  function autoSubmitFun(){
     ajaxSubmit("autoSumitScoreAJAX.action",$('#formId'),function(){});
  }
*/

以上所述是小编给大家介绍的Ajax+FormData+javascript实现无刷新表单信息提交,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
Mar 21 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
调试代码导致IE出错的避免方法
Apr 04 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
Feb 28 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
Sep 29 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
Jan 23 Javascript
vuex actions异步修改状态的实例详解
Nov 06 Javascript
vue+Element-ui前端实现分页效果
Nov 15 Javascript
js实现复制粘贴的两种方法
Dec 04 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
Oct 24 #Javascript
express文件上传中间件Multer详解
Oct 24 #Javascript
用js实现博客打赏功能
Oct 24 #Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
Oct 24 #Javascript
jQuery插件实现可输入和自动匹配的下拉框
Oct 24 #Javascript
JS中split()用法(将字符串按指定符号分割成数组)
Oct 24 #Javascript
在js中实现邮箱格式的验证方法(推荐)
Oct 24 #Javascript
You might like
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php 执行系统命令的方法
2009/07/07 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
javascript forEach通用循环遍历方法
2010/10/11 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python算法应用实战之栈详解
2017/02/04 Python
Python 备份程序代码实现
2017/03/06 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
Python秒算24点实现及原理详解
2019/07/29 Python
python3实现高效的端口扫描
2019/08/31 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
深入浅析HTML5中的SVG
2015/11/27 HTML / CSS
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
雪山饭庄的创业计划书范文
2014/01/18 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
食品安全承诺书
2014/05/22 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
老公保证书
2015/01/17 职场文书
心理健康教育主题班会
2015/08/13 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android