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的图片懒加载js
Jun 30 Javascript
关于query Javascript CSS Selector engine
Apr 12 Javascript
jQuery当鼠标悬停时放大图片的效果实例
Jul 03 Javascript
javascript带回调函数的异步脚本载入方法实例分析
Jul 02 Javascript
JavaScript如何获取数组最大值和最小值
Nov 18 Javascript
jquery中each循环的简单回滚操作
May 05 jQuery
Angular.js ng-file-upload结合springMVC的使用教程
Jul 10 Javascript
JS实现百度搜索接口及链接功能实例代码
Feb 02 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
Aug 30 Javascript
js中的reduce()函数讲解
Jan 18 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
在Vuex中Mutations修改状态操作
Jul 24 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
资料注册后发信小技巧
2006/10/09 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
jquery获取input表单值的代码
2010/04/19 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
python几种常用功能实现代码实例
2019/12/25 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
linux面试题参考答案(4)
2013/01/28 面试题
行政工作个人的自我评价
2014/02/13 职场文书
初中家长寄语
2014/04/02 职场文书
主持人演讲稿
2014/05/13 职场文书
周年庆典答谢词
2015/01/20 职场文书
2015大学生求职信范文
2015/03/20 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB