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 相关文章推荐
javascript URL编码和解码使用说明
Apr 12 Javascript
在vs2010中调试javascript代码方法
Feb 11 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
Jun 12 Javascript
微信小程序 animation API详解及实例代码
Oct 08 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 Javascript
layer.close()关闭进度条和Iframe窗的方法
Aug 17 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
Aug 20 Javascript
JS集合set类的实现与使用方法示例
Feb 01 Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 Javascript
CountUp.js实现数字滚动增值效果
Oct 17 Javascript
使用Typescript和ES模块发布Node模块的方法
May 25 Javascript
微信小程序实现拼图小游戏
Oct 22 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面向对象概念
2011/11/06 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
javascript背投广告代码的完善
2008/04/08 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python Tkinter简单布局实例教程
2014/09/03 Python
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python 类的特殊成员解析
2018/06/20 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
python求质数列表的例子
2019/11/24 Python
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
护士优质服务演讲稿
2014/08/26 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis