ajax+FormData+javascript实现无刷新表单信息提交

ajax+FormData+javascript实现无刷新表单信息提交

原理:

dom收集表单信息,利用FormData快速收集表单信息  ,实例化表单数据对象 同时收集fm的表单域信息。

var fd = new FormData(fm); //实例化对象

alert(fd);

fd对象内部有收集的form表单域信息

ajax传递表单信息

1.静态显示页面代码

 1 <!DOCTYPE html  >
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5         <script type="text/javascript">
 6         window.onload = function(){
 7             var fm = document.getElementsByTagName(‘form‘)[0];
 8             fm.onsubmit = function(){
 9                 //利用FormData实现form表单信息收集
10                 var fd = new FormData(fm);
11                 //fd 内部会把普通表单域 和 上传文件域 的信息都收集
12
13                 //ajax传递表单信息
14                 var xhr = new XMLHttpRequest();
15                 xhr.onreadystatechange = function(){
16                     if(xhr.readyState==4){
17                         alert(xhr.responseText);
18                     }
19                 }
20
21                 //设置监听事件ajax.upload.onprogress
22                 xhr.upload.onprogress = function(evt){
23                     //感知附件上传情况,利用事件对象感知
24                     var loaded = evt.loaded;
25                     var total = evt.total;
26                     var per = Math.floor((loaded/total)*100)+"%";
27
28                     document.getElementById(‘son‘).innerHTML = per;
29                     document.getElementById(‘son‘).style.width = per;
30                 }
31                 xhr.open(‘post‘,‘./05.php‘);
32                 xhr.send(fd);
33
34                 return false;//组织浏览器提交
35             }
36         }
37         </script>
38
39         <style type="text/css">
40         #pat {width:430px;height:40px; border:5px solid blue;}
41         #son {width:0;height:100%; background-color:lightblue;}
42         </style>
43     </head>
44     <body>
45         <h2>ajax+FormData实现 无刷新文件上传</h2>
46         <form method="post" action="" >
47             <p>用户名:<input type="text" name="username" /></p>
48             <p>密码:<input type="password" name="password"  /></p>
49             <p>邮箱:<input type="text" name="email"  /></p>
50             <div id="pat"><div id="son"></div></div>
51             <p>头像:<input type="file" name="user_pic" /></p>
52             <p><input type="submit" value="注册" /></p>
53         </form>
54     </body>
55 </html>

2.php页面代码

服务器保存附件名字为本身名字
本地文件------>上传(php程序处理)------>服务器
本地文件名字的 字符集 gb2312
php程序的 字符集 utf-8--->gb2312  (在程序里边把utf-8编码的附件名字 转码为 gb2312)服务器的 字符集 gb2312

 1 <?php
 2 //$_FILES[‘user_pic‘][‘error‘]
 3 //0->ok    1->大小超过php.ini限制    2->大小超过MAX_FILE_SIZE限制
 4 //3->附件只上传了一部分(不完整)    4->没有上传附件
 5 if($_FILES[‘user_pic‘][‘error‘]>0){
 6     exit(‘上传附件有问题,有可能没有附件‘);
 7 }
 8
 9 //服务器保存附件名字为本身名字
10 //本地文件------>上传(php程序处理)------>服务器
11 //本地文件名字的 字符集 gb2312
12 //php程序的 字符集 utf-8--->gb2312
13 //  (在程序里边把utf-8编码的附件名字 转码为 gb2312)
14 //服务器的 字符集 gb2312
15 $name = $_FILES[‘user_pic‘][‘name‘];
16 $name = iconv(‘UTF-8‘,‘GB2312‘,$name);  //$name的编码由utf-8---变为--->gb2312
17
18 $path = "./upload/";
19
20 //附件上传逻辑
21 //move_uploaded_file(临时路径名,真实路径名);
22 if(move_uploaded_file($_FILES[‘user_pic‘][‘tmp_name‘],$path.$name))
23     echo "success";
24 else
25     echo "fail";
时间: 2024-08-01 10:26:22

ajax+FormData+javascript实现无刷新表单信息提交的相关文章

ajax+FormData+javascript 实现无刷新表单注册

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script type="text/javascript"> window.onload=function() { var fm=document.getElementsByTagName("form")[0]; f

ajax+FormData+javascript 实现无刷新上传附件

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script type="text/javascript"> window.onload=function() { var fm=document.getElementsByTagName("form")[0]; f

DWZ框架Ajax无刷新表单提交处理流程

DWZ框架Ajax无刷新表单提交处理流程是: 1.       ajax表单提交给服务器 2.       服务器返回一个固定格式json结构 3.       js会调函数根据这个json数据做相应的处理 注意: DWZ框架默认的ajax表单提交都是返回json数据,告诉客户端操作是否成功,成功或失败提示信息,以及成功后的处理方式(刷新某个navTab或关闭某个navTab或navTab页面跳转). 表单提交后服务器操作失败了,客户端接收statusCode和message后给出错误提示,表单

JavaScript 创建一个 form 表单并提交

<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <input onclick="MakeForm()" type="button" class="btn grey"

毕业设计——Django项目网页刷新表单重复提交问题

1. 先记录一些正常情况:在填写表单页面(如注册.登录页面)时刷新页面时数据清空是正常的,此时就是重新发送了一个页面请求. 2. 问题一:用户登录后,刷新登陆后的页面(如首页)时会出现表单重复提交问题,此时csrf-token会报错并重定向到登录页面: 解决方案一:在登录时使用页面重定向请求首页(暂时先用这个) 解决方案二:待查找…… 原文地址:https://www.cnblogs.com/johnyhe/p/10579023.html

js实现无刷新表单提交文件,将ajax请求转换为form请求方法

最近在做项目的时候遇到一个需要上传文件的需求,因为ajax请求是无法上传二进制文件流的,所以只能用form表单提交,而form提交有一个问题就是会使页面刷新,本文解决了form表单提交文件时页面刷新的问题. 一.无刷新实现form提交文件 将form的target指向为一个iframe就可以实现无刷新提交文件了,但关键是还需要看到后台返回的数据,所以还需要为该iframe注册一个回调函数,因为iframe和该页面在同域内,所以可以在iframe里可以调用该回调函数,就可以看到后台返回的数据了.实

ajax无刷新表单提交

ajax无刷新提交笔记 数据库自己模拟建一个 执行一下添加功能 php部分采用pdo方法: <?php $db ='mysql'; $host ='localhost'; $port ='3306'; $dbname = 'ajax'; $user = 'root'; $pwd  = ''; $dsn = "$db:host=$host;port=$port;dbname=$dbname";    //设定字符集  $options = array(PDO::MYSQL_ATTR

按下enter键后表单自动提交问题

在HTML的form表单里,按下enter键之后,默认情况下表单会自动提交. 在公司一个项目里,按下enter键自动提交表单的查询结果与按下搜索框的搜索结果页面显示不一样,按下搜索按钮之后是通过Ajax请求返回结果:而按下enter键是直接post请求然后跳转返回一个页面,失去了页面样式及导航等. 一开以为是写了js代码导致按下enter键之后会触发表单提交,后来把js代码全部移除也是一样地按下enter键会触发表单提交.到网上搜索发现是因为默认情况下在form表单内按下enter键会触发表单自

JavaWeb学习总结(十三)——使用Session防止表单重复提交

在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提交的常见应用场景 有如下的form.jsp页面 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <!DOCTYPE HTML>