项目三遇到的知识点总结

一、jQuery ajax 使用formdata对象上传单个图片

  • 上传图片并没有做出预览的效果

1、HTML

<input id="file" type="file" name="file"  accept="image/*" />
<button id="upload" type="button">上传</button>

2、js

  • 引入jq

      <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
      <script>
      	var files = document.getElementById('file').files[0];
      	var data = new FormData();
      	data.append('file',files);
    
      	$('#upload').click(function(){
      		$.ajax({
      			type: 'POST',
      			url: '地址',
      			dataType: 'json',
      			data: data,
      			//cache: false, 
      			processData: false, //processData 默认为false,当设置为true的时候,jquery ajax 提交的时候不会序列化 data,而是直接使用data
              	contentType: false,
      			success:function(res){
      			},
      			error:function(err){
      			}
    
      		})
      	})
      </script>
    

3、注意

  • processData设置为false.因为data值是FormData对象,不需要对数据做处理。
  • cache设置为false,上传文件不需要缓存。
  • 默认值为contentType = "application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。
  • 浅谈contentType = false,原文地址 https://segmentfault.com/a/1190000007207128

二、jQuery对json的各种遍历方法

1、概述

  • JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不须要任何的API或工具包

在JSON中,有两种结构:对象和数组

1.对象

  • 一个对象以{开始,}结束。每个'key'后跟:,"key/value对"之间用,分割。

              json = {'name': '李木子','password': '123456'}
    

2.数组

  • 数组是值得有序集合。一个数组以[开始,]结束。值之间用,分隔。

      json = [{'name': '李木子','password': '123456'},{'name': '张长弓','password':'654321'}]
    

2、JSON对象和JSON字符串的转换

  • 在数据传输流程中,json是以文本,即字符串的形式传递的,而js操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换时关键

JSON字符串

var jsonStr = "{'name': '李木子','password': '123456'}";

JSON对象

var jsonObj = {'name': '李木子','password': '123456'};

1.String转换为JSON对象

  • 1.Javascript支持的转换方式

      var jsonObj = eval('(' + jsonStr + ')');
    
  • 注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。

  • 2.jQuery插件支持的转换方式

      $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 
    
  • 3.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器

      JSON.parse(jsonStr);
    
  • 注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。

2.Json对象转换为String字符串

JSON.stringify(jsonobj)

3、jQuery遍历json对象

1.grep

  • $.grep()函数使用指定的函数过滤数组中的元素,并返回过滤后的数组

      var array = [1,2,3,4,5,6,7,8,9];
      var filterarray = $.grep(array,function(value){
      	return value > 5;//筛选出大于5的
      })
      for(var i = 0;i<filterarray.length;i++){
      	console.log(filterarray[i])
      }//和下面函数效果相同
      for(key in filterarray){
      	console.log(filterarray[key])
      }
    

2.each

each 有两种用法:

1.第一种$.each(object,callback)
  • $.each(object,callback);
  • object可以是数组,js对象,dom对象,json对象
2.第二种$(selector).each(callback)
  • $(selector).each(callback);

  • callback是回调函数,跳出使用return false;return true和continue的用法一样,但是在each中只能使用return ture;

  • callback的实体就是function(index,element);

  • index:遍历的索引位置,从0开始,如果为json对象或对象属性,则此值为对应的key值或属性;

  • element:遍历得到的对象元素();

      <body>
      	<div class="main">
      	</div>
      </body>
      <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
      <script>
      	$(function() {
             	var obj = [
             		{ name: "迪丽热巴", birthday: "1992-06-03"},
             		{ name: "易烊千玺", birthday: "2000-11-28"},
             	];
             //下面使用each进行遍历
             var html = ''
             $.each(obj, function (index, value) {
                 html += "<tr><td>" + '爱豆:'+value.name + "</td><td style='width:30px;'>"+''+"</td><td>" + '生日:'+value.birthday + "</td></tr>";
    
             });
    
             $(".main").append(html);
      	})
      </script>
    

``

<script type="text/javascript">
	$().ready(function(){
		var anObject = {one:1,two:2,three:3};//对象
		$.each(anObject,function(name,value) {
			alert(name);
			alert(value);
		});
		var anArray = ['one','two','three'];//数组
		$.each(anArray,function(n,value){
			alert(n);
			alert(value);
		});
	});
</script>

3.inArray

  • 返回数组中指定元素的索引值

      <script>
      	$().ready(function(){
      		var anArray = ['one','two','three'];
      		var index = $.inArray('two',anArray);
      		alert(index);//返回该值在数组中的键值,返回1
      		alert(anArray[index])// two
      	})
      </script>
    

4.map

  • $.map()函数用于使用指定函数处理数组中的每个元素(或对象的每个属性),并将处理结果封装为新的数组返回。

      <script>
      	$().ready(function(){
      		var strings = ['0','1','2','3','4','5','6']
      		var values = $.map(strings,function(value){
      			var result = new Number(value);					
      			return isNaN(result) ? null:result;
      		})
      		for (key in values) {
      			alert(values[key])
      		}
      	})
      </script>
    

3、原生js遍历json对象

遍历json对象:

1. 无规律

<script>
	var json = [{迪丽热巴: '女神',易烊千玺: 18,aaa: 'haha'},{ddd: '测试',ccc: '结果'}];
	for (var i = 0,l < json.length;i < l; i++){
		for(var key in json[i]){
			alert(key+':'+json[i][key]);	
		}
	}
</script>

2.有规律

<script>
	packJson = [
	 
		{"name":"nikita", "password":"1111"},
		 
		{"name":"tony", "password":"2222"}
		 
	];
	 
	for(var p in packJson){//遍历json数组时,这么写p为索引,0,1
	 
	  alert(packJson[p].name + " " + packJson[p].password);
	 
	}
</script>

或者

<script>
	for(var i = 0; i < packJson.length; i++){
	 
	  alert(packJson[i].name + " " + packJson[i].password);
	 
	}
</script>

4.遍历json对象

<script>	
	var obj = {'name': '张长弓','password': '123456','department': '技术部','sex': '男','old': '24'};
	for( var p in obj){
		console.log(obj[p])
	}
</script>

三、html引入公共的头部和底部

index.html

 <footer class="footer"></footer>
 <script>
        $('.footer').load('footer.html',function(responseTxt,statusTxt,xhr){
            console.log('responseTxt,statusTxt,xhr')
         
        })
</script>

footer.html

  • footer.html不需要是完整的HTML

      <ul class="g-flex">//公共内容
            <li class="g-flex-auto"><a href="#" class="i-b">首页</a></li>
            <li class="g-flex-auto"><a href="#" class="i-b">分类</a></li>
            <li class="g-flex-auto"><a href="#" class="i-b">订单</a></li>
            <li class="g-flex-auto"><a href="#" class="i-b">我的</a></li>
       </ul>
    

注意

  • $('.footer').load()调用时必须在服务器环境中打开HTML文件才能成功,不能直接双击打开

  • 打开后浏览器的路径应该是http://127.0.0.1:8020/index.html,

  • 而不是file:///G:/html/index.html这样的路径,否则在大部分的浏览器上都无法使用。

  • 在此建议使用HBuilder这款编辑器,在运行时会创建服务器环境,并且在局域网中在别的手机或电脑上预览。

四、jQuery cookie操作

  • 下载与引用:jquery.cookie.js基于jquery;先引jquery,再引用jquery.cookie.js;下载 http://plugins.jquery.com/cookie/

      <script src='js/jquery-3.3.1.js'></script>
      <script src='js/jquery.cookie.js'></script>
    

1.创建一个回话cookie:

$.cookie('cookieName','cookieValue');
  • 注:当没有指明cookie时间时,所创建的cookie有效期默认到用户浏览器关闭为止,故被称为会话cookie。

2.创建一个持久cookie:

$.cookie('cookieName','cookieValue',{expires:7});
  • 注:当指明时间时,故称为持久cookie,并且有效时间为天。

3.创建一个持久并带有效路径的cookie:

$.cookie('cookieName','cookieValue',{expires:7,path: '/'});
  • 注:如果不设置有效路径,在默认情况下,只能在cookie设置当前页面读取该cookie,cookie的路径用于设置能够读取cookie的顶级目录。

4.创建一个持久并带有效路径和域名的cookie:

$.cookie('cookieName','cookieValue',{expires: 7,path: '/',domain: 'chuhoo.com',secure: false,raw: false});
  • 注:domain:创建cookie所在网页所拥有的域名;secure:默认是false,如果为true,cookie的传输协议需为https;raw:默认为false,读取和写入时候自动进行编码和解码(使用encodeURIComponent编码,使用decodeURIComponent解码),关闭这个功能,请设置为true。

5.获取cookie:

$.cookie('cookieName');//如果存在则返回cookieValue,否则返回null
  • 更改cookie里的属性uid

      cookieName.uid = newUid;//newUid新的uid
      $('cookieName','cookieValue')//更改之后上传新的cookie
    

6.删除cookie

$.cookie('cookieName',null);
  • 注: 如果想删除一个带有效路径的cookie,如:$.cookie('cookieName',null,{path: '/'});

五、封装的获取地址的方法

	function getHrefData(href) {
		var href = href || window.location.href;
		if(href.indexOf("?") == -1) {
			return {};
		}
		var paramStr = href.substring(href.indexOf("?") + 1);
		var paramArray = paramStr.split("&");
		var reVal = {};
		for(var i = 0, len = paramArray.length; i < len; i++) {
			var tmp = paramArray[i].split("=");
			reVal[tmp[0]] = decodeURI(tmp[1]);
		}
		return reVal;
	}
posted @ 2018-09-17 19:14  不完美的完美  阅读(467)  评论(0编辑  收藏  举报