H5API-jQuery的ajax使用FormData、拖拽文件上传、cookie

#H5API-jQuery的ajax使用FormData、拖拽文件上传、cookie ##7.1 jQuery的ajax使用FormData 注意:jquery 需要设置process:false, contentType:false;否则直接写data:fd会出错

###例子:jQuery的ajax使用FormData 1.html <body> <form id="myform"> 姓名 <input type="text" name="username"> <button>提交</button> </form> <script src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script> <script> $("#myform").submit(function(){ // var fd = new FormData($("#myform")[0]) var fd = new FormData(this)

				$.ajax({
					type:"post",
					url:"http://localhost/7.5-07/wangweiwei-6.5/server/post.php",
					// data:$("#myform").serialize(),
					data:fd,
					processData:false,
					contentType:false,
					success:function(res){
						console.log(res)
					}
				})
				return false;
			})
		</script>
	</body>

##7.2 使用原生ajax进行拖拽文件上传并显示进度 2.html <head> <meta charset="UTF-8"> <title>拖拽文件上传</title> <style> #box{ margin:50px auto; padding:10px; width:1200px; min-height: 200px; border:2px solid #ccc; background-color: #eee; } #box.over{ border:2px dotted #ccc; transform: scale(0.9, 0.9); }

		#box .item{
			position:relative;
			margin:5px;
			float:left;
		}

		#box .item img{
			width:200px;
		} 

		#box .item .item-progress{
			position: absolute;
			left:50%;
			top:50%;
			width:80px;
			height:80px;
			transform: translate(-50%, -50%);
			line-height: 80px;
			background-color: rgba(0,0,0,.4);
			color:#fff;
			border-radius: 40px;
			text-align: center;
		}
	</style>
</head>
<body>
	<div id="box"></div>

	<script>
		var box = document.getElementById("box");

		// 拖拽元素 进入目标元素
		box.addEventListener("dragenter",function(){
			this.classList.add("over")
		})

		// 拖拽元素 离开目标元素
		box.addEventListener("dragleave",function(){
			this.classList.remove("over");
		})

		// 拖拽元素 在目标元素中
		box.addEventListener("dragover",function(en){
			en.preventDefault();	//阻止默认事件
		})

		// 拖拽元素 放置在目标元素中
		box.addEventListener("drop",function(en){
			// 读取文件
			[].forEach.call(en.dataTransfer.files,function(file){
				// 创建div
				var div = document.createElement("div");
				div.classList.add("item");
				box.appendChild(div);

				// 读取图片
				readImage(file,div);

				// 上传图片
				uploadImage(file,div)
			})

			// 避免把图片在浏览器打开
			en.preventDefault();

			this.classList.remove("over");
		});

		// 读取图片
		function readImage(file,div){
			var fr = new FileReader();
			fr.onload = function(){
				// 创建img
				var img = document.createElement("img");
				img.src = fr.result;
				div.appendChild(img);
			}

			fr.readAsDataURL(file);
		}

		// 上传图片
		function uploadImage(file,div){
			// 创建FormData
			var fd = new FormData();

			// 把文件对象添加到FormData中
			fd.append("uploadfile",file);

			// 显示进度
			var itemProgress = document.createElement("div");
			itemProgress.classList.add("item-progress");
			itemProgress.innerHTML = "0%";
			div.appendChild(itemProgress)

			// ajax操作
			var xhr = new XMLHttpRequest();
			xhr.onload = function(){
				// 上传结束了 清除上传进度显示
				setTimeout(function(){
					div.removeChild(itemProgress);
				},1000)
			}

			// 上传进度的事件
			xhr.upload.onprogress = function(ev){
				itemProgress.innerHTML = Math.round(ev.loaded / ev.total * 100) + "%";
			}

			// 请求
			xhr.open("POST","http://localhost/7.5-07/wangweiwei-6.5/server/upload.php");

			// 正式发送
			xhr.send(fd);
		}
	</script>
</body>

##7.3 WEB存储 --HTML5 web 存储,一个比cookie更好的本地存储方式

###1、cookie ####1. 例子:通过其他文件读取cookie 3.hmtl、3s.html、test.html #####3.html代码如下: <body> <!-- 通过访问3s.html可以发现同路径下的文件可以读取到所有cookie --> <a href="3s.html">3s.html</a>

				<!-- 通过访问上一目录下的test.html可以发现读取不到username的cookie -->
				<a href="../test.html">test.html</a>

				<script>
					// 设置cookie
					document.cookie = "username=123";
					document.cookie = "age=100;path=/";

					// 设置cookie时间
					var date = new Date();
					date.setTime(date.getTime() + 1000 * 3600 * 24 * 7);

					document.cookie = "grad=H513;path=/;expires=" + date.toUTCString();

					console.log(document.cookie);
				</script>
			</body>

#####3s.html和test.html放入代码如下: <body> <script> console.log(document.cookie) </script> </body>

####2. 例子:读取、设置、删除cookie 4.html、cookie.js #####4.html代码如下: <body> <!-- 引入cookie封装js文件 --> <script src="cookie.js"></script> <script> // 读取cookie console.log(cookie.get("age")); // 返回false,所以没有这个cookie console.log(cookie.get("address")); // 返回上海

					// 设置cookie
					// cookie.set("address","上海");
					// cookie.set("address","beijign","/");

					// 设置cookie有效期
					var date = new Date();
					date.setTime(date.getTime() + 1000 * 3600 * 24 *365);
					cookie.set("email","beijing@qq.com","/",date);

					// 删除cookie
					// cookie.drop("address");	// 删除掉address为上海的cookie
					cookie.drop("address","/");	// 删除掉address为beijing的cookie
				</script>
			</body>

#####cookie.js封装代码如下: var cookie = (function(){ /* * 读取cookie * @param string key */ function get(key){ var cookieArr = document.cookie.split(";"); var res = false; cookieArr.forEach(function(item){ var itemArr = item.split("="); if(itemArr[0] === key){ res = itemArr[1] } });

					return res;
				}

				/**
				* 	设置cookie
				* 	[@param](https://my.oschina.net/u/2303379) string key		键
				* 	[@param](https://my.oschina.net/u/2303379) string value		值
				* 	[@param](https://my.oschina.net/u/2303379) string path  	路径,可选
				*	@param date   expires 	有效期,可选
				* 	@param string domain 	域名,可选
				*/
				function set(key,value,path,expires,domain){
					var cookieStr = key + "=" + value;
					// if(path !== undefined){
					if(path){
						cookieStr += ";path=" + path;
					}

					if(expires){
						cookieStr += ";expires=" + expires.toUTCString();
					}

					if(domain){
						cookieStr += ";domain=" + domain;
					}

					document.cookie = cookieStr;
				}

				/**
				* 	销毁cookie,一般是通过返回过去的时间来删除cookie
				* 	@param string key
				*/
				function drop(key,path,domain){
					// 获取时间
					var date = new Date();
					// 返回过去时间
					date.setTime(date.getTime() - 1);

					set(key,"",path,date,domain);
				}

				// 返回函数
				return {
					get:get,
					set:set,
					drop:drop
				}
			})()

###2、localStorage 以键值对方式存储
存储期限没有时间限制

###3、sessionStorage 以键值对方式存储
存储期限浏览器关闭

###4、例子:设置localStorage和sessionStorage 5.hmtl <body> <script> // 设置localStorage window.localStorage.username = "老王"; window.localStorage["userage"] = 10; console.log(localStorage);

			// 设置sessionStorage
			window.sessionStorage.username = "老李";
			sessionStorage["age"] = 18;
			console.log(sessionStorage);
		</script>
	</body>

###5、cookie、localStorage和sessionStorage 三者的区别

  • 共同点:都是在浏览器端存储的数据,且同源的

  • 区别:

    • cookie:

      • cookie数据有路径(path)的概念,可以限制cookie只属于某个路径下

      • 存储:在用户本地终端上的数据存储;比较复杂的存储,其本身也是web存储的一种

      • 存储大小:cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识

      • 保质期:默认当用户关闭浏览器窗口后;或cookie过期时间之前一直有效

      • 作用域:在所有同源窗口中都是共享的

      • 常用于:第二次访问免登录

    • localStorage:

      • 存储:以键值对方式存储,相对cookie比较简单的存储

      • 存储大小:数据完全存储在客户端,仅在本地保存,不需要通过浏览器的请求将数据传给服务器,因此相比cookie来说能够存储更多的数据

      • 保质期:没有时间限制,数据始终有效

      • 作用域:在所有同源窗口中都是共享的

      • 常用于:购物车

    • sessionStorage:

      • 存储:以键值对方式存储,相对cookie比较简单的存储

      • 保质期:是不能改的,当用户关闭浏览器窗口后,数据会被删除

      • 作用域:不在不同的浏览器窗口中共享,即使是同一个页面

##作业 ###1、cookie js 实现换肤操作 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>换肤操作</title> <link rel="stylesheet" href="" id="mylink"> <style> .icon-list{ position: absolute; right:20px; top:20px; }

				ul{
					list-style:none;
					padding:0;
				}

				.icon{
					width:15px;
					height:15px;
					float:left;
					margin-left:5px;
					cursor:pointer;
					background-image:url("./theme.gif");
				}

				#skin_0{
					background-position: 0px 0px;
				}
				#skin_1{
					background-position: -20px 0px;
				}
				#skin_2{
					background-position: -40px 0px;
				}
				#skin_3{
					background-position: -60px 0px;
				}
				#skin_4{
					background-position: -80px 0px;
				}
				#skin_5{
					background-position: -100px 0px;
				}


				#skin_0.active{
					background-position: 0px -15px;
				}
				#skin_1.active{
					background-position: -20px -15px;
				}
				#skin_2.active{
					background-position: -40px -15px;
				}
				#skin_3.active{
					background-position: -60px -15px;
				}
				#skin_4.active{
					background-position: -80px -15px;
				}
				#skin_5.active{
					background-position: -100px -15px;
				}
			</style>
		</head>
		<body>


			
			<ul class="icon-list">
				<li class="icon" id="skin_0"></li>
				<li class="icon" id="skin_1"></li>
				<li class="icon" id="skin_2"></li>
				<li class="icon" id="skin_3"></li>
				<li class="icon" id="skin_4"></li>
				<li class="icon" id="skin_5"></li>
			</ul>

			<script src="cookie.js"></script>
			<script>



				//获取 li的集合
				var lis = document.querySelectorAll(".icon");

				//从cookie中取出 值
				var skinName = cookie.get("skinName") ? cookie.get("skinName") : "skin_0";

				//控制按钮 对号
				document.getElementById(skinName).classList.add("active");

				//加载想赢的css
				document.querySelector("#mylink").href = "./css/"+skinName+".css";

				//循环 绑定单击事件
				for (var i = 0; i < lis.length; i ++) {
					lis[i].addEventListener("click", function(){

						//其他li 去掉 active 类
						for (var j = 0; j < lis.length; j ++) {
							lis[j].classList.remove("active");
						}
						//当前的li 添加 active 类
						this.classList.add("active");
						//更换 皮肤 (css)
						document.querySelector("#mylink").href = "./css/"+this.id+".css";

						//把当前的皮肤加入 cookie
						var date = new Date();
						date.setTime(date.getTime() + 3600 * 1000 * 24 * 7);
						cookie.set("skinName", this.id, "/", date);
					})
				}

			</script>
		</body>
		</html>

转载于:https://my.oschina.net/u/3502365/blog/1186673

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值