重学JavaWeb(3)JSON、AJAX

1. JSON

1. 概念:JavaScript Object Notation:JavaScript对象表示法

2. JSON的特点
(1)JSON是一种轻量级的数据交换格式
(2)JSON是一种独立的语言
(3)JSON易于理解
(4)同时也作为网络数据传输的首选格式。其他语言例如Java也是支持解析生成JSON格式的数据

3. JSON的语法
(1)基本规则

1. json数据是由键值对构成的
	1. 键均为字符串类型,使用引号(单双都可以)引起来
	2. 值可以是任意类型
		1. 数字(整数或者浮点数)
		2. 字符串(在双引号中)
		3. boolean值
		4. 数组(在方括号中){"persons" : [{},{}]}
		5. 对象 {"address" : {"province" : "陕西" , "city" : "西安"}}
		6. 函数:{"eat" : function(){alert("吃饭")}}
2. 键值对之间使用冒号隔开
3. 数据由逗号分割:多个键值对使用逗号分割
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>
<script>
    var lolData = {
        "name": "卡牌大师",
        "age": 23,
        "phone": 123123123,
        "R": function () {
            alert("全图乱飞");
        }
    }

    var name = lolData.name;
    alert(name);

    var age = lolData.age;
    alert(age);

    var phone = lolData.phone;
    alert(phone);

    lolData.R();
</script>

(2)JSON的嵌套(疯狂的 . 就完事了)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>
<script>
    var dsm = {
        "name": "韩金龙",
        "age": 33,
        "sex": "man",
        "car": {"carName": "BMW", "carPrice": 50, "carColor": ["white", "black", "red"]}
    }

    //我现在要取到 black 的值
    var color = dsm.car.carColor[1];
    alert(color);
</script>

(3)JSON数组

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
</html>
<script>
	var lol1 = {
		"name": "noc",
		"age": 23,
		"price": 4800
	};
	var lol2 = {
		"name": "tf",
		"age": 24,
		"price": 4800
	};
	var lol3 = {
		"name": "mf",
		"age": 25,
		"price": 3150
	};
	var lol4 = {
		"name": "ez",
		"age": 26,
		"price": 6300
	};

	var loler1 = [lol1, lol2, lol3, lol4];

	//json数组
	var loler2 = [{
		"name": "noc",
		"age": 23,
		"price": 4800
	}, {
		"name": "tf",
		"age": 24,
		"price": 4800
	}, {
		"name": "mf",
		"age": 25,
		"price": 3150
	}, {
		"name": "ez",
		"age": 26,
		"price": 6300
	}];

	//要取出ez的年龄
	var age = loler2[3].age;
	alert(age);
</script>

(4)JSON的遍历

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
</html>
<script type="text/javascript">
	//json的遍历 for - in
	var lol1 = {
		"name": "noc",
		"age": 23,
		"price": 4800
	};

	 for(key in lol1){
		 var v = lol1[key];
		 alert(key + "--" + v);
	 }
	 
	 
	 //json数组的遍历
	 var loler = [{
	 	"name": "noc",
	 	"age": 23,
	 	"price": 4800
	 }, {
	 	"name": "tf",
	 	"age": 24,
	 	"price": 4800
	 }, {
	 	"name": "mf",
	 	"age": 25,
	 	"price": 3150
	 }, {
	 	"name": "ez",
	 	"age": 26,
	 	"price": 6300
	 }];
	 
	 for(index in loler){
		 var lolObj = loler[index];
		 for(key in lolObj){
			 var value = lolObj[key];
			 alert(key + "--" + value);
		 }
	 }
</script>

(5)复杂的JSON(疯狂的 . 就完事了!)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
</html>
<script type="text/javascript">
	//json这个格式是网络传输数据的首选格式
	//请求一个后台,那么后台返回的数据就是json格式的
	var json = {
		"data": {
			"yesterday": {
				"date": "16日星期五",
				"high": "高温 20℃",
				"fx": "西南风",
				"low": "低温 7℃",
				"fl": "<![CDATA[2级]]>",
				"type": "多云"
			},
			"city": "西安",
			"forecast": [{
				"date": "17日星期六",
				"high": "高温 20℃",
				"fengli": "<![CDATA[2级]]>",
				"low": "低温 8℃",
				"fengxiang": "东北风",
				"type": "晴"
			}, {
				"date": "18日星期天",
				"high": "高温 17℃",
				"fengli": "<![CDATA[1级]]>",
				"low": "低温 7℃",
				"fengxiang": "西南风",
				"type": "阴"
			}, {
				"date": "19日星期一",
				"high": "高温 19℃",
				"fengli": "<![CDATA[1级]]>",
				"low": "低温 8℃",
				"fengxiang": "东北风",
				"type": "阴"
			}, {
				"date": "20日星期二",
				"high": "高温 14℃",
				"fengli": "<![CDATA[2级]]>",
				"low": "低温 7℃",
				"fengxiang": "西南风",
				"type": "阴"
			}, {
				"date": "21日星期三",
				"high": "高温 16℃",
				"fengli": "<![CDATA[2级]]>",
				"low": "低温 5℃",
				"fengxiang": "东风",
				"type": "晴"
			}],
			"ganmao": "感冒易发期,外出请适当调整衣物,注意补充水分。",
			"wendu": "8"
		},
		"status": 1000,
		"desc": "OK"
	}
	
	//我要取到20号的风向
	var wind = json.data.forecast[3].fengxiang;
	alert(wind);
</script>

4. JSON对象与JSON字符串的相互转换
(1)转换的原因:因为其他语言,只能把JSON当成字符串来看待,那他返回给前台,是一个JSON字符串,前台要解析JSON字符串中的数据,就必须先把JSON字符串转换成JSON对象

(2)相关方法

1. JSON.parse():将一个json字符串解析成JavaScript对象
2. JSON.stringify():将JavaScript对象转换成json字符串
【注意】
	1. JSON字符串不要美化(所谓的美化,就带有换行空格)那么你JSON.parse(jsonStr);就转换不了
	2. var jsonStr2="{'name':'李四','age':23}"; 这种格式的JSON字符串是不符合规范的,那么你JSON.parse(jsonStr2)转换不了
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
</html>
<script type="text/javascript">
	//json对象
	var jsonObj = {
		"name": "wzr",
		"age": 23,
		"sex": "man"
	};
	
	//json字符串
	var jsonStr = '{"name":"wzr","age":23,"sex":"man"}';
	
	//json字符串转化为json对象
	var obj = JSON.parse(jsonStr);
	alert(obj.name);  //wzr
	
	//json对象转化为json字符串
	var str = JSON.stringify(jsonObj);
	alert(str);   //{"name":"wzr","age":23,"sex":"man"}
</script>

2. AJAX

1. 概念:ASynchronous JavaScript And XML:异步的JavaScript 和 XML

2. Ajax有关的内容

1. 同步和异步必须建立在客户端与服务端相互通信的基础上
	1. 同步:客户端必须等待服务端的响应,在等待的期间客户端不能做其他的操作
	2. 异步:客户端不需要等待服务端的响应,在服务器处理请求的过程中,客户端可以进行其他操作
2. Ajax是一种无需重新加载整个网页的情况下,能够更新部分网页的技术。
3. 通过在后台与服务器进行少量的数据交换,Ajax可以使网页实现异步更新,意味着可以再不用加载整个网页的情况下,对网页的某部分进行更新

3. 原生的Ajax实现方式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button type="button" onclick="sendRequest()">点击发送</button>
	</body>
</html>
<script type="text/javascript">

   //1. 创建ajax对象
   /*
   	XMLHttpRequest对象
   		1. 现代浏览器均支持XMLHttpRequest对象
   		2. XMLHttpRequest用于在后台与服务器交换数据
   */
   var xmlhttp = new XMLHttpRequest();
   
   function sendRequest(){
	   //2. 请求后台
	   /*
			向服务器发送请求,使用XMLHttpRequest对象的open()和send()方法
		*/
	   
	   //open():打开链接
	   /*
			参数:
				1. 请求方式:GET,POST
					1. GET:请求参数在url后面拼接,send方法为空参
					2. POST:请求参数在url后面定义
				2. 请求的url
				3. 同步或异步请求:true(异步),false(同步)
	   */
	   xmlhttp.open("GET","http://wthrcdn.etouch.cn/weather_mini?city=西安",true);
	   //send():发送请求
	   xmlhttp.send();
	   
	   //3. 接收后台返回的json数据
	   //当xmlhttp对象的就绪状态改变时,触发事件onreadystatechange
	   xmlhttp.onreadystatechange = function(){
		   //当 readyState 等于 4 且状态为 200 时,表示响应已就绪:
		   if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
			   //xmlhttp.responseText:接收后台响应的json数据
			   var jsonStr = xmlhttp.responseText;
			   //document.write(jsonStr);  返回的是json字符串形式
			   var jsonObj = JSON.parse(jsonStr);  //转换为json对象
			   alert(jsonObj.desc);
		   }
	   }
   }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值