学习第三十天

一:
Ajax
异步无刷新技术

核心对象

				XMLHttpRequest对象
				获取xhr对象:var xhr = new  XMLHttpRequest();
					onreadystatechange	监听readystate值变化的事件
					readystate			数据响应的响应
											0=未初始化  
											1=已经调用open方法,但未调用send方法
											2=调用send方法,但未开始响应
											3=响应部分响应
											4=完全响应数据,且可以使用
					status				响应状态码
											200=响应成功
											500=服务器异常(报错)
											404=未找到资源
					statusText			状态码的说明
					responseText		响应的数据

二:
Ajax实现流程

		1、创建XMLHttpRequest对象
			var xhr = new XMLHttpRequest();
		2、准备请求/打开请求
			xhr.open(参数1,参数2,参数3)
				参数1:请求的方式  (GET|POST)
				参数2:请求的路径  (请求地址;如果是GET请求,参数直接拼接在地址栏后面)
				参数3:是否异步	    (true|false。默认是true,表示异步)
		3、发送请求
			xhr.send(参数);
				如果是GET请求,则send(null); 参数会直接设置在请求的地址后面;
				如果是POST
					向服务器发送POST请求由于解析机制的原因,需要进行特别的处理。因为POST请求和Web表单提交是不同的,需要使用XHR来模仿表单提交。
					xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
					如果有参数,则send(参数);如果没有参数,则send(null)
		4、接收响应
			如果是同步请求
				判断是否响应成功 status==200
					如果是,则获取响应数据  xhr.responseText
			如果是异步请求
				通过onreadystatechange事件监听readyState的值变化,当数据完全响应成功时,readyState的值为4
					判断readyState的值是否为4
						如果是,判断是否响应成功 status==200
							如果是,则获取响应数据  xhr.responseText

Ajax的GET请求[同步请求、异步请求]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>封装Ajax</title>
</head>
<body> 
</body>
<script type="text/javascript">

	var obj = {
		url:"js/data.json",
		type:"GET", // 请求类型 GET|POST
		async:true, // 是否异步请求  true|false
		data:{
			uname:"zhangsan",
			upwd:"123"
		},
		success:function(result){
			alert(result);
		}
	};
	
	ajax(obj);
	
	var obj2 = {
			url:"js/data.json",
			type:"GET", // 请求类型 GET|POST
			async:false, // 是否异步请求  true|false
			data:{
				uname:"zhangsan",
				upwd:"123"
			},
			success:function(result){
				console.log(result);
			}
		};
		
	ajax(obj2);
	
	
	ajax({
		url:"js/data.json",
		type:"GET", // 请求类型 GET|POST
		async:false, // 是否异步请求  true|false
		data:{
			uname:"zhangsan",
			upwd:"123"
		},
		success:function(result){
			console.log(result);
		}
	});
	
	/**
		封装Ajax
	 */
	function ajax(obj) {
		// 1、创建XMLHttpRequest对象
		var xhr = new XMLHttpRequest();
		
		// 将对象格式的参数转换成键值对的字符串格式   
		var params = formatParams(obj.data);
		
		// 判断是否是GET请求
		if ((obj.type).toUpperCase() == "GET") {
			// 将参数拼接到地址后面
			obj.url += (obj.url).indexOf("?") != -1  ? "&"+params : "?"+params;
		}
		
		// 2、准备请求/打开请求
		xhr.open(obj.type,obj.url,obj.async);
		
		// 3、发送请求  xhr.send(参数);
		if ((obj.type).toUpperCase() == "GET") {
			// GET请求,参数设置为null
			xhr.send(null);
		} else {
			// 如果是POST请求
			// 向服务器发送POST请求由于解析机制的原因,需要进行特别的处理。因为POST请求和Web表单提交是不同的,需要使用XHR来模仿表单提交。
			xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			// 如果有参数,则send(参数);如果没有参数,则send(null)
			xhr.send(params);
		}
		
		// 4、接收响应
		if (obj.async) { // 如果是异步请求
			// 如果是异步请求
			// 	通过onreadystatechange事件监听readyState的值变化,当数据完全响应成功时,readyState的值为4
			xhr.onreadystatechange = function() {
				//	判断readyState的值是否为4
				if (xhr.readyState == 4) {
					// 判断是否响应成功 status==200;如果是,则获取响应数据  xhr.responseText
					callback();
				}
			}
			
		} else { // 如果是同步请求
			// 判断是否响应成功 status==200;如果是,则获取响应数据  xhr.responseText
			callback();
		}
		
		/*
			回调函数
		*/
		function callback() {
			// 判断是否响应成功 status==200;如果是,则获取响应数据  xhr.responseText
			if (xhr.status == 200) {
				// console.log(xhr.responseText);
				obj.success(xhr.responseText);
			}
		}
		
	}
	
	/**
	 * 格式化参数数据,并返回给调用者
	 * @param {Object} data
	 */
	function formatParams(data){
		// 得到格式化好的参数数据
		var params = null;
		if (data != null  && data.length > 0) {
			// 定义数组,接收每个参数键值对
			var arr = [];
			// 遍历对象,得到对象中的键和值
			for (var k in data) {
				// 拼接键和值
				var param = k + "=" + data[k];
				// 将键值对设置到数组中
				arr.push(param);
			}
			// 将数组转换成以指定符号分隔的字符串
			params = arr.join("&");
		}
		return params;
	}
	  
	 var o = {
		uname:"zhangsan",
		uage:18,
		usex:true,
		cats:["小黑","小白"],
		dog:{
			name:"哈士奇",
			age:1
		},
		sayHello:function(userNme){
			console.log(userNme + " Hello...");
		}
	 }
	 
	/*  console.log(o.uname);
	 console.log(o.cats);
	 console.log(o.dog);
	 console.log(o.dog.name);
	 console.log(o.sayHello);
	 o.sayHello("张三"); */
	 
</script>

</html>

三:

$.ajax({
		type:"get", 
		url:"http://iservice.itshsxt.com/restaurant/find",
		dataType:"jsonp", // 允许跨域请求   (服务器也需要设置允许请求跨域)
		success:function(result){
			console.log(result);
		}
	});
// 有请求地址,无参数,无返回值
	$.get("data.json");
	
	// 有请求地址,有参数,无返回值
	$.get("data.json",{uanme:"zhangsan",upwd:"123"});
	
	
	// 有请求地址,无参数,有返回值
	$.get("data.json",function(result){
		console.log(result);
	});
	
	//  有请求地址,有参数,有返回值
	$.get("data.json",{uanme:"zhangsan",upwd:"123"},function(result){
		console.log(result);
	});
$.post("data.json",{uanme:"zhangsan",upwd:"123"},function(result){
		console.log(result);
	});
$.getJSON("data.txt",{uanme:"zhangsan",upwd:"123"},function(result){
		console.log(result);
	});

处理跨域请求

$.ajax({
		type:"get", 
		url:"http://iservice.itshsxt.com/restaurant/find",
		dataType:"jsonp", // 允许跨域请求   (服务器也需要设置允许请求跨域)
		success:function(result){
			console.log(result);
		}
	});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值