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 相关文章推荐
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
Apr 04 Javascript
关于js datetime的那点事
Nov 15 Javascript
JavaScript中的this关键字使用方法总结
Mar 13 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
Nov 23 Javascript
ES6中箭头函数的定义与调用方式详解
Jun 02 Javascript
vue多种弹框的弹出形式的示例代码
Sep 18 Javascript
vue、react等单页面项目应该这样子部署到服务器
Jan 03 Javascript
浅谈React + Webpack 构建打包优化
Jan 23 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
Aug 31 Javascript
微信小程序之 catalog 切换实现解析
Sep 12 Javascript
Openlayers+EasyUI Tree动态实现图层控制
Sep 28 Javascript
Vue看了就会的8个小技巧
Jan 21 Vue.js
利用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
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
thinkphp分页实现效果
2016/10/13 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
专业毕业生个性的自我评价
2013/10/03 职场文书
求职信的最佳写作思路
2014/02/01 职场文书
优良学风班总结材料
2014/02/08 职场文书
教师开学感言
2014/02/14 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
人事聘任通知
2015/04/21 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
Go 语言中 20 个占位符的整理
2021/10/16 Golang