Ajax学习

Ajax学习

一.Ajax简介:

​ 2005年Jesse James Garrett发表了一篇文章,标题为:“Ajax:A new Approach to Web Applications”。他在这篇文章里介绍了一种技术,用他的话说,就叫:Ajax,是 Asynchronous JavaScript + XML的简写。这种技术能够向服务器请求额外的数据而无须卸载页面(即刷新), 会带来更好的用户体验。一时间,席卷全球。

​ Ajax技术核心是XMLHttpRequest对象(简称XHR),这是由微软首先引入的一个特性,其 他浏览器提供商后来都提供了相同的实现。在XHR出现之前,Ajax式的通信必须借助一些手段 来实现,大多数是使用隐藏的框架或内嵌框架。

​ XHR 的出现,提供了向服务器发送请求和解析服务器响应提供了流畅的接口。能够以异步 方式从服务器获取更多的信息,这就意味着,用户只要触发某一事件,在不刷新网页的情况下, 更新服务器最新的数据。

​ 虽然Ajax中的x代表的是 XML,但 Ajax通信和数据格式无关,也就是说这种技术不一定 使用XML。

二.XMLHttpRequest对象

​ 1.在浏览器中就可将它实例化,使用XMLHttpRequest对象,必须调用open()方法,接受三个参数:要发生的请求方式,请求地址和表示是否异步,在通过send()方法发送请求到服务器上

​ 2.当请求发送到服务端,收到响应后,响应的数据会自动填充XHR对象的属性。四个属性:responseText:作为响应主体返回文本。 responseXML:如 果 响 应 主 体 内 容 类 型 是 “text/xml” 或 “application/xml”,则返回包含响应数据的XML DOM文 档。status:

响应HTTP状态。statusText:HTTP状态的说明

​ 3.响应过后,第一步就要检查status属性,来确定响应成功,一般状态码为200,就为响应成功。

​ 200:ok,服务器成功返回了页面

​ 500: 服务器遇到意外错误,无法完成请求

​ 404:指定的url未找到

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button onclick="ajaxGet1()">同步请求</button></br>
		<button onclick="ajaxGet2()">异步请求</button>
	</body>
	<script>
		function ajaxGet1(){
			//1.创建XMLHttpRequest对象
			var xhr = new XMLHttpRequest();
			//2.打开请求/准备请求
			xhr.open("GET","js/data.json",false);      //同步请求
			//3.发送请求
			xhr.send(null);
			//4.接收响应
			if(xhr.status==200){
				console.log(xhr.responseText);
			}
		}
		function ajaxGet2(){
			//1.创建XMLHttpRequest对象
			var xhr = new XMLHttpRequest();
			//2.打开请求/准备请求
			xhr.open("POST","js/data.json",true);      //异步请求
			xhr.send(null);
			xhr.onreadystatechange=function(){
				//判断该状态码是否是4,完全响应
				if(xhr.readyState==4){
					if(xhr.status==200){
						console.log(xhr.responseText);
					}
				}
			}
		}
	</script>
</html>

​ 4.同步调用虽然简单,但ajax最常用的是帮助我们完成异步请求,在使用异步调用的时候,检查readyState属性,每当readyState属性改变时,触发 readystatechange 事件。该属性有5个值:

​ 0 : 未初始化,还未调用open方法

​ 1 : 启动,已经调用open方法,但未调用send方法

​ 2 :发送,已经调用send方法,但还未得到响应

​ 3 : 接收,已经接收到部分响应数据

​ 4:完成,已经接收全部响应数据

三.GET和POST

​ 1.在服务器中有两种请求方式:分别时get和post,在ajax使用过程中,get的使用频率比post高。

​ 2.GET请求:GET请求会将参数追加到URL的末尾。注意:当没有encodeURIComponent()方法时,在一些特殊字符比如“&”,会出现错误导致无 法获取。

​ 3.POST请求:POST 请求可以包含非常多的数据,我们在使用表单提交的时候,很多就是使用的 POST 传输方式。

​ POST可以存储2M大小的字节,而GET只能存储1024M字节,GET存储空间较小。

​ 从性能上来讲POST 请求比GET请求消耗更多一些,用相同数据比较,GET 最多比POST 快两倍。

四.封装Ajax

​ 当我们使用原生的js去写Ajax时,非常繁琐,切代码多,参数问题等…,我们就需要一个Ajax函数,封装起来,方便我们调用。

五.Jquery-Ajax

1.$.ajax()

​ 格式:$.ajax({});

​ 参数:

​ type: 请求方式GET或POST

​ url:请求地址

​ async:异步(默认true)或同步(false)

​ data: 发送到服务端的数据

​ dataType: 指定服务端返回的数据类型

​ success:请求成功后执行该函数

​ error:请求失败后执行该函数

get请求

$.ajax({  
	type:"get",  
	url:"js/data.json",  
	async:true,  
	success : function (msg){   
		var str = msg;   
		console.log(str)   	
		$('div').append("<ul></ul>");  
       for(var i=0; i<msg.prices.length;i++){    				$('ul').append("<li></li>")     					$('li').eq(i).text(msg.prices[i])   
       }  
       },  error : function (errMsg) {   							console.log(errMsg);   								$('div').html(errMsg.responseText)  } }); 

post请求

$.ajax({  
	type:"post",  
	url:"js/data.json",  
	data:"name=tom",
	async:true,  
	contentType: "application/x-www-form-urlencoded", 
	success : function (msg){   
		var str = msg;   
		console.log(str)   	
		$('div').append("<ul></ul>");  
       for(var i=0; i<msg.prices.length;i++){    				$('ul').append("<li></li>")     					$('li').eq(i).text(msg.prices[i])   
       }  
       },  error : function (errMsg) {   							console.log(errMsg);   								$('div').html(errMsg.responseText)  } }); 
2.$.get()

可以帮助我们取代复杂的$.ajax()方法,是get方式的ajax请求。

​ 1.请求 json 文件,忽略返回值 $.get(’…/js/cuisine_area.json’);

​ 2.请求 json 文件,传递参数,忽略返回值 $.get(’…/js/cuisine_area.json’,{name:“tom”,age:100});

​ 3.请求 json 文件,拿到返回值,请求成功后可拿到返回值 $.get(’…/js/cuisine_area.json’,function(data){ console.log(data) });

​ 4.请求 json 文件,传递参数,拿到返回值 $.get(’…/js/cuisine_area.json’,{name:“tom”,age:100},function(data){ console.log(data) })

3.$.post()

可以帮助我们取代复杂的$.ajax()方法,是post方式的ajax请求。

4.$.getJSON()

表示请求返回的数据类型是 JSON格式的 ajax请求 ,但也是get方式的请求。

5.jsonp

可以支持远程跨域,当我们有两个域名需要相互访问时,使用普通的Ajax方法是无法获取到数据的,我们可以使用jsonp方式发送请求。

$.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、付费专栏及课程。

余额充值