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 相关文章推荐
cnblogs中在闪存中屏蔽某人的实现代码
Nov 14 Javascript
基于javascipt-dom编程 table对象的使用
Apr 22 Javascript
php 中序列化和json使用介绍
Jul 08 Javascript
JS获取地址栏参数的小例子
Aug 23 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
浅谈jQuery双事件多重加载的问题
Oct 05 Javascript
Javascript 跨域知识详细介绍
Oct 30 Javascript
使用node.js实现微信小程序实时聊天功能
Aug 13 Javascript
ztree加载完成后显示勾选节点的实现代码
Oct 22 Javascript
详解vue父子组件状态同步的最佳方式
Sep 10 Javascript
vue监听键盘事件的相关总结
Jan 29 Vue.js
小程序实现列表倒计时功能
Jan 29 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
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
基于PHP常用函数的用法详解
2013/05/10 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
在双python下设置python3为默认的方法
2018/10/31 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
几个人围成一圈的问题
2013/09/26 面试题
护理工作感言
2014/01/16 职场文书
简历的自我评价范文
2014/02/04 职场文书
新学期开学标语2015
2015/07/16 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
利用Pycharm连接服务器的全过程记录
2021/07/01 Python
i7 6700处理器相当于i5几代
2022/04/19 数码科技
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技