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.ui.progressbar 中文文档
Nov 26 Javascript
javascript 导出数据到Excel(处理table中的元素)
Dec 18 Javascript
深入理解JavaScript作用域和作用域链
Oct 21 Javascript
js关闭父窗口时关闭子窗口
Apr 01 Javascript
jQuery阻止事件冒泡具体实现
Oct 11 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
Jun 06 Javascript
JavaScript Length 属性的总结
Nov 02 Javascript
node.js微信公众平台开发教程
Mar 04 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
May 30 Javascript
微信小程序封装分享与分销功能过程解析
Aug 13 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
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
基于jquery的表头固定的若干方法
2011/01/27 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
Python自动登录126邮箱的方法
2015/07/10 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
C#面试问题
2016/07/29 面试题
Structs界面控制层技术
2013/10/11 面试题
司机辞职报告范文
2014/01/20 职场文书
上班离岗检讨书
2014/01/27 职场文书
保密协议书范本
2014/04/22 职场文书
大专生求职信
2014/06/29 职场文书
副总经理岗位职责
2015/02/02 职场文书
三好学生个人总结
2015/02/15 职场文书
工作证明书
2015/06/15 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python