Ajax学习小结

ajax是Asynchronous JavaScript xml 的缩写。

Ajax是无需刷新页面就能从服务器获取数据的一种方法,(也就是不点击顶部的刷新按钮而进行局部页面的重绘)

负责Ajax运作的核心对象是XMLHttpRequest对象

XHR对象是由微软最早在IE5中引入,用于通过javascript从服务器获取XML数据

同源策略是对xml的一个主要约束,它为通信设置了“相同的域,相同的端口,相同的协议”这一限制。试图访问以上限制的资源,就会引发安全错误,除非采用被认可的跨域解决方案,这个解决方案叫CORS(Cross-origin Resource Sharing  跨域资源共享)图像Ping和JSONP是另外两种跨域方式,但是不如CORS稳妥。

Comet是对Ajax的进一步扩展,让服务器几乎能够实时向客户端推送数据,实现Comet的手段主要有两个,长轮询和http流,所有的浏览器都支持长轮询但是仅有部分浏览器支持http流,SSE(Server-sent Event 服务器发送事件)是一种实现Comet交互的浏览器API,既支持长轮询,也支持短轮询。

Web Socket是一种与服务器进行全双工,双向通信的信道,与其他方案不同,WebSocket不使用HTTP协议,而使用一种自定义的协议。这种协议为快速传递小数据设计,虽然要求使用不同的web服务器,但却在速度上占有优势。

XHR为服务器发送请求和解析服务器响应提供了流畅的接口,能够以异步的方式从服务器获取更多的信息,意味着用户单击后,可以不刷新页面也能获取新的数据,也就是说,可以使用Xhr获取新数据,然后再通过DOM将新数据插到页面中,虽然名字中含有xml,但是Ajax通信与数据格式无关,这种技术就是无需刷新页面就可以从服务器获取数据,但是不一定是XML数据。

综上所述,ajax实现无刷新更新数据的过程如下:

 

说到这里还要了解一下什么是异步

 

  1. 运用XMLHttpRequest进行异步交换
  2. 服务器上的文件,以xml,html.或json格式保存文本数据
  3. 运行javascript来操作dom
  4. Css和html展示获取的数据

使用Ajax最关键的地方,就是实现异步请求、接受响应以及执行回调,异步与同步的区别是什么呢

异步就如同于收短信,可以同时接收很多条,同步就如同打电话,一次只能给一个人打,打完这个在打那个,ajax也可以使用同步模式执行,但是同步模式属于阻塞模式,这样会导致多条线路执行时又必须一条一条的执行,会让Web页面出现假死的状态,所以一般采用异步模式

异步请求一共有五个状态,用来标识异步请求的不同阶段。

  • 0 UNSENT 代理被创建,但尚未调用 open() 方法
  • 1 OPENED open() 方法已经被调用
  • 2 HEADERS_RECEIVED send() 方法已经被调用,并且头部和状态已经可获得
  • 3 LOADING 下载中; responseText 属性已经包含部分数据
  • 4 DONE 下载操作已完成

XHR的用法(post写法)

原生写法:

  var xhr = new XMLHttpRequest();
			function getDatas(){
				xhr.open('post','php/getAlarmDatas.php');
				xhr.setRequestHeader('Content-type','application/x-www-form-urlencode');
				xhr.send('name'+deviceName);
				xhr.onreadystatechange = function(){
					if(xhr.status==200 && xhr.readyState==4){
						alarms = xhr.responseText;
					}
				}
			}

 Jquery写法

           function getDatas(){
				$.ajax({
					url:'php/getAlarmDatas.php',
					data:'name='+deviceName,
					type:'POST',
					success: function(result){
						alarms = result;
					}
				})
			}

Angular写法

app.add.controller('alarmCtrl',['$scope','$http',function($scope,$http){
				$scope.getDatas = function(){
					$http({
						method:'POST',
						url:'php/getAlarmDatas.php',
						data:{
							name:deviceName
						}
					}).success(function(data,status,headers,config){
						$scope.alarms = data;
					}).error(function(data,status,headers,config){});
				};
			}])

通过原生JS发送的ajax数据请求的核心步骤为

  1. 定义对象
  2. 发送数据
  3. 处理响应
  4. DOM渲染

 

Ajax的优劣势

优势

由于Ajax包含众多特性,优势不足也明显

  1. 不需要插件支持(一般浏览器只要支持js就可以)
  2. 用户体验好(无刷新页面更新数据)
  3. 提升Web程序的性能(传递数据按需放松,不需要整体提交)
  4. 减轻服务器和带宽的负担(将服务器的一些操作转移到客户端)

劣势

  1. 不同版本的浏览器度XMLHttpRequest对象支持度不足
  2. 前进、后退的功能被破坏(因为ajax永远在当前页,不会记录前后页面)
  3. 搜索引擎的支持度不够(因为搜索引擎爬虫不能理解JS引起变化数据的内容)
  4. p4、开发工具匮乏 (相对于其他语言工具来讲,JS或者Ajax调试开发比较少)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值