Ajax编程技术第四章Ajax技术.ppt
《Ajax编程技术第四章Ajax技术.ppt》由会员分享,可在线阅读,更多相关《Ajax编程技术第四章Ajax技术.ppt(42页珍藏版)》请在三一办公上搜索。
1、Ajax编程技术第四章Ajax技术,4.1 XMLHttpRequest对象,本章主要介绍技术是XMLHttpRequest对象,因为Ajax应用程序的中心就是它。同时,对于许多数网页开发的实际问题中,它也是最广泛适用的解决方案。我们还将介绍该对象的GET和POST方法的使用。同时探讨用户使用此对象常见的错误,例如当试图让页面在所有服务器上都能运行时遇到的一些问题。最后还介绍一种Ajax技术的替代方案及其示例。,4.1 XMLHttpRequest对象,XMLHttpRequest对象最初是作为IE5中的一个ActiveX控件出现的,随后Mozilla 1.0、Netscape7、Safari
2、1.2和Opera7.60都将它纳入自身。XMLHttpRequest对象在IE浏览器和非IE浏览器中实现方法不同。XMLHttpRequest对象的作用在于,允许用脚本程序通过HTTP连接到服务器,而不比通过HTTP请求响应模型与服务器通信。,4.2 创建XMLHttpRequest对象,创建XMLHttpRequest对象在IE7、Firefox、safari和Opera中创建该对象的JavaScript代码为:var xmlRequet=new XMLHttpRequest();在IE5/6中代码为:var xmlRequest=new ActiveXObject(“Microsoft.
3、XMLHTTP”);注意,JavaScript区分大小写,如果大小写不正确,什么东西都创建不出来。使用XMLHttpRequest对象的方式有两种,同步和异步。,4.2 创建XMLHttpRequest对象,同步使用XMLHttpRequest对象按照下面模式,可以同步地XMLHttpRequest对象:创建对象;创建请求;发送请求。这种模式与传统模式没有区别,用处不大,真正强大的地方在于异步地使用它。,4.2 创建XMLHttpRequest对象,异步使用XMLHttpRequest对象异步使用XMLHttpRequest对象时,必须使用onreadystatechange事件调用该对象。在
4、触发该事件后,必须在应用程序采取行动之前检查readyState属性的内容,因此使用模式应该是:创建该对象;设置readystatechange事件触发一个指定的函数;检查readyState属性,看数据是否准备就绪。如果没有准备好,隔一段时间再次检查。因为数据没有下载完时,我们无法使用它的属性和方法。如果已经准备好,就继续往下执行;打开请求;发送请求。readystatechange事件的整个操作都是在后台执行,这样就能够异步使用XMLHttpRequest对象。,4.2 创建XMLHttpRequest对象,readyState属性readyState属性指出了XMLHttpRequest
5、对象在发送/接收数据过程中所处的几个状态。XMLHttpRequest对象会经历5种不同的状态。0:未初始化。对象已经创建,但还未初始化,即还没调用open方法;1:已打开。对象已经创建并初始化,但还未调用send方法;2:已发送。已经调用send 方法,但该对象正在等待状态码和头的返回;3:正在接收。已经接收了部分数据,但还不能使用该对象的属性和方法,因为状态和响应头不完整;4:已加载。所有数据接收完毕,4.2 创建XMLHttpRequest对象,XMLHttpRequest对象的属性和方法,4.2 创建XMLHttpRequest对象,4.2 创建XMLHttpRequest对象,使用X
6、MLHttpRequest对象示例此示例使用此对象网页的实现动态显示。页面上有几个链接,分别点击,可以显示不同的文字或图片,或者清除显示的文字或图片。下面是程序:,4.2 创建XMLHttpRequest对象,/index.htm Ajax实例展示 显示联系我们 显示日历时间 显示广告图片 清除联系我们 清除日历时间 清除广告图片,4.2 创建XMLHttpRequest对象,/XHRequest.jsvar xHRObject=false;if(window.XMLHttpRequest)xHRObject=new XMLHttpRequest();else if(window.Active
7、XObject)xHRObject=new ActiveXObject(Microsoft.XMLHTTP);function sendRequest(data)if(data=delContacts)box1.innerHTML=;else if(data=delCalendar)box2.innerHTML=;else if(data=delAdverts)box3.innerHTML=;else var bodyofrequest=getBody(data);xHRObject.open(POST,display.php,true);xHRObject.setRequestHeader(
8、Content-Type,application/x-www-form-urlencoded);xHRObject.onreadystatechange=getData;xHRObject.send(bodyofrequest);function getBody(data)var argument=value=;argument+=encodeURIComponent(data)return argument;function getData()if(xHRObject.readyState=4,4.2 创建XMLHttpRequest对象,ContactsAnhui,Hefei,USTC;b
9、reak;case Calendar:$dt=gmdate(M d Y H:i:s);echo box2|Calendar:$dt;break;case Adverts:$source=logo.gif;echo box3|Advert:;break;case delContacts:echo box1|;break;case delCalendar:echo box2|?,4.2 创建XMLHttpRequest对象,程序运行:运行初始状态入图1,点击链接后见图2:,图1,图2,4.3 常见错误,编程常见错误企图通过双击网页文件运行它;XMLHttpRequest大小写不正确;多写了对圆括号
10、:正确:xHRObject.onreadystatechange=getData;错误:xHRObject.onreadystatechange=getData();必须弄清楚,在JavaScript中:函数名后如果有圆括号,意思就是将函数的返回值赋给等号左边的变量;没有圆括号,是将函数本身赋给等号前的变量。,4.3 常见错误,同源问题XMLHttpRequest对象有些问题来自于同源问题。在较早版本的浏览器中,可以运行来自任何源的任何脚本,由此带来很严重的安全隐患。因此,处于安全的考量,“同源策略”被要求强制执行。即只有来自同一域、同一协议和同一端口的脚本才可以运行。IE不检验它从XMLHt
11、tpRequest对象中取回的字段。其中的一个字段就是HTTPREFERER,它包含用户所浏览页面的URL/域名(注意:该字段的值并不总是一个)。这意味着Referer完全可以在客户端进行伪造。IE这个的这个安全漏洞Referer值不可信。解决的办法之一是,我们可以在编写Cookie时,将域名/服务器添加到cookie中,以便验证发出的和接收的同源。,4.3 常见错误,缓存控制:IE主动缓存为了节约带宽资源,浏览器会在本地缓存页面,然后从缓存中找出该页面而不是从源服务器下载页面。这样一来,当页面更新后,可能页面并没有显示这种更新。解决的办法是,强制停止缓存。可以在网页中插入如下代码:这样足以使
12、浏览器重载该页面。但如果使用XMLHttpRequest对象,且请求中包含GET指令,那么IE将始终缓存该页面,而决不会重载该页面。,4.3 常见错误,缓存问题的解决方法我们有三种办法来解决缓存造成的问题。在GET请求后添加querystring,并确保每次运行时,querystring值都不一样。将日期作为querystring值是一个好主意:xHRObject.open(“GET”,”display.php?id=“+Number(new Date)+”这种“每次输入不同的querystring值”的解决方法,从原理上将是一种回避策略。,4.3 常见错误,设置HTTP头部的If-Modif
13、ied-Since为一个过期的时间:xHRObject.open=(“GET”,“display.php?value=“+data,true);xHRObject.setRequestHeader(“If-Modified-Since”,“Sat,1,Jan 2000 00:00:00 GMT”);使用这种方法,可以阻止缓存。使用POST 请求。我们将在下一节讨论这种方法。一般来说,前两种方法用起来比较顺手,第3种方法可以完全避免缓存的困扰。,4.3 常见错误,跨浏览器兼容在使用Ajax技术时,最困难的问题是让应用程序在不同的浏览器中都能够正常运行。实际上,这种想法非常不实际。爱XMLHttp



- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Ajax 编程 技术 第四

链接地址:https://www.31ppt.com/p-5415020.html