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 相关文章推荐
广告显示判断
Aug 31 Javascript
解决FireFox下[使用event很麻烦]的问题
Nov 26 Javascript
Mootools 1.2教程 Fx.Tween的使用
Sep 15 Javascript
jQuery 自动增长的文本输入框实现代码
Apr 02 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
基于JavaScript实现弹出框效果
Feb 19 Javascript
jquery 仿锚点跳转到页面指定位置的实例
Feb 14 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 Javascript
vuejs点击class变化的实例
Sep 05 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
Dec 19 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 Javascript
JavaScript canvas实现雨滴特效
Jan 10 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
javascript中UMD规范的代码推演
2018/08/29 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
Python3中的2to3转换工具使用示例
2015/06/12 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
Python科学计算之Pandas详解
2017/01/15 Python
Python常见异常分类与处理方法
2017/06/04 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
某公司.Net方向面试题
2014/04/24 面试题
项目合作计划书
2014/01/09 职场文书
考试不及格的检讨书
2014/01/22 职场文书
公司营业员的自我评价
2014/03/04 职场文书
交通志愿者活动总结
2014/06/27 职场文书
模范教师材料大全
2014/12/16 职场文书
经典爱情感言
2015/08/03 职场文书
小学班主任工作随笔
2015/08/15 职场文书
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL