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(二) 事件机制(1)
Nov 25 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
Jun 28 Javascript
可编辑下拉框的2种实现方式
Jun 13 Javascript
使用VS开发 Node.js指南
Jan 06 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
Apr 12 Javascript
JavaScript数组合并的多种方法
May 22 Javascript
微信小程序 progress组件详解及实例代码
Oct 25 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
Apr 11 Javascript
页面间固定参数,通过cookie传值的实现方法
May 31 Javascript
基于vue.js中事件修饰符.self的用法(详解)
Feb 23 Javascript
jQuery轻量级表单模型验证插件
Oct 15 jQuery
vue实现评论列表功能
Oct 25 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
php实现无限级分类
2014/12/24 PHP
php中file_exists函数使用详解
2015/05/08 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
PHP会话控制实例分析
2016/12/24 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python3.6正式版新特性预览
2016/12/15 Python
python字符串中的单双引
2017/02/16 Python
Python 移动光标位置的方法
2019/01/20 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python内存动态分配过程详解
2019/07/15 Python
python导入库的具体方法
2020/06/18 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
包装类的功能、种类、常用方法
2012/01/27 面试题
个人四风问题整改措施思想汇报
2014/10/04 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python