Ajax编程技术第四章Ajax技术.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Ajax编程技术第四章Ajax技术.ppt》由会员分享,可在线阅读,更多相关《Ajax编程技术第四章Ajax技术.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、主讲教师:李艺主讲教师:李艺主讲教师:李艺主讲教师:李艺Ajax编程技术第四章Ajax技术中国科大Ajax编程技术4.1 XMLHttpRequest对象本章主要介绍技术是本章主要介绍技术是XMLHttpRequest对象,因为对象,因为Ajax应用程序的中心就是它。同时,对于许多数网页开应用程序的中心就是它。同时,对于许多数网页开发的实际问题中,它也是最广泛适用的解决方案。发的实际问题中,它也是最广泛适用的解决方案。我们还将介绍该对象的我们还将介绍该对象的GET和和POST方法的使用。方法的使用。同时探讨用户使用此对象常见的错误,例如当试图让页同时探讨用户使用此对象常见的错误,例如当试图让页
2、面在所有服务器上都能运行时遇到的一些问题。面在所有服务器上都能运行时遇到的一些问题。最后还介绍一种最后还介绍一种Ajax技术的替代方案及其示例。技术的替代方案及其示例。中国科大Ajax编程技术4.1 XMLHttpRequest对象XMLHttpRequest对象最初是作为对象最初是作为IE5中的一个中的一个ActiveX控件出现的,随后控件出现的,随后Mozilla 1.0、Netscape7、Safari1.2和和Opera7.60都将它纳入自身。都将它纳入自身。XMLHttpRequest对象在对象在IE浏览器和非浏览器和非IE浏览器中浏览器中实现方法不同。实现方法不同。XMLHttpR
3、equest对象的作用在于,对象的作用在于,允许用脚本程允许用脚本程序通过序通过HTTP连接到服务器连接到服务器,而不比通过,而不比通过HTTP请求响应请求响应模型与服务器通信。模型与服务器通信。中国科大Ajax编程技术4.2 创建XMLHttpRequest对象p创建创建XMLHttpRequest对象对象n在在IE7、Firefox、safari和和Opera中创建该对象的中创建该对象的JavaScript代码为:代码为:var xmlRequet=new XMLHttpRequest();n在在IE5/6中代码为:中代码为:var xmlRequest=new ActiveXObject
4、(“Microsoft.XMLHTTP”);注意,注意,JavaScript区分大小写,如果大小写不正确,区分大小写,如果大小写不正确,什么东西都创建不出来。什么东西都创建不出来。使用使用XMLHttpRequest对象的方式有两种,同步和对象的方式有两种,同步和异步。异步。中国科大Ajax编程技术4.2 创建XMLHttpRequest对象p同步使用同步使用XMLHttpRequest对象对象按照下面模式,可以同步地按照下面模式,可以同步地XMLHttpRequest对象:对象:1.创建对象;创建对象;2.创建请求;创建请求;3.发送请求。发送请求。这种模式与传统模式没有区别,用处不大,真正
5、强这种模式与传统模式没有区别,用处不大,真正强大的地方在于异步地使用它。大的地方在于异步地使用它。中国科大Ajax编程技术4.2 创建XMLHttpRequest对象p异步使用异步使用XMLHttpRequest对象对象异步使用异步使用XMLHttpRequest对象时,必须使用对象时,必须使用onreadystatechange事件调用该对象。在触发该事件后,必须在应用程序采取行动之前检查事件调用该对象。在触发该事件后,必须在应用程序采取行动之前检查readyState属性的内容,因此使用模式应该是:属性的内容,因此使用模式应该是:1.创建该对象;创建该对象;2.设置设置readystate
6、change事件触发一个指定的函数;事件触发一个指定的函数;3.检查检查readyState属性,看数据是否准备就绪。属性,看数据是否准备就绪。u如果没有准备好,隔一段时间再次检查。因为数据没有下载完时,如果没有准备好,隔一段时间再次检查。因为数据没有下载完时,我们无法使用它的属性和方法。我们无法使用它的属性和方法。u如果已经准备好,就继续往下执行;如果已经准备好,就继续往下执行;4.打开请求;打开请求;5.发送请求。发送请求。readystatechange事件的整个操作都是在后台执行,这样就能够异事件的整个操作都是在后台执行,这样就能够异步使用步使用XMLHttpRequest对象。对象。
7、中国科大Ajax编程技术4.2 创建XMLHttpRequest对象preadyState属性属性readyState属性指出了属性指出了XMLHttpRequest对象在发送对象在发送/接收数接收数据过程中所处的几个状态。据过程中所处的几个状态。XMLHttpRequest对象会经历对象会经历5种不同种不同的状态。的状态。n0:未初始化。对象已经创建,但还未初始化,即还没调用:未初始化。对象已经创建,但还未初始化,即还没调用open方法;方法;n1:已打开。对象已经创建并初始化,但还未调用:已打开。对象已经创建并初始化,但还未调用send方法;方法;n2:已发送。已经调用:已发送。已经调用s
8、end 方法,但该对象正在等待状态码和方法,但该对象正在等待状态码和头的返回;头的返回;n3:正在接收。已经接收了部分数据,但还不能使用该对象的属:正在接收。已经接收了部分数据,但还不能使用该对象的属性和方法,因为状态和响应头不完整;性和方法,因为状态和响应头不完整;n4:已加载。所有数据接收完毕:已加载。所有数据接收完毕中国科大Ajax编程技术4.2 创建XMLHttpRequest对象pXMLHttpRequest对象的属性和方法对象的属性和方法XMLHttpRequest对象的属性对象的属性属性属性说明说明Onreadystatechange返回或设置异步请求的事件处理程序返回或设置异步
9、请求的事件处理程序readyState返回状态码:返回状态码:0:未初始化;:未初始化;1:打开;:打开;2:发送;发送;3:正在接收;:正在接收;4:已加载:已加载responseBody(仅仅IE7)使用无符号字节数组返回使用无符号字节数组返回HTTP响应响应responseText使用字符串返回使用字符串返回HTTP响应响应responseXML使用使用XML DOM对象返回对象返回HTTP响应响应Status返回返回HTTP状态码状态码statusText返回描述特定返回描述特定HTTP状态码含义的文本状态码含义的文本中国科大Ajax编程技术4.2 创建XMLHttpRequest对象
10、XMLHttpRequest对象的方法对象的方法方法方法说明说明Abort取消请求取消请求getAllResponseHeaders获取获取HTTP响应头的整个列表响应头的整个列表getResponseHeader仅获取指定的仅获取指定的HTTP响应头响应头Open需要使用多个参数,第一个设置方法属性,第二需要使用多个参数,第一个设置方法属性,第二个设置目标个设置目标URL,第三个指定是同步,第三个指定是同步(false)还还是异步是异步(true)发送请求发送请求Send发送请求到服务器发送请求到服务器setRequestHeader添加自定义添加自定义HTTP头到请求头到请求中国科大Aja
11、x编程技术4.2 创建XMLHttpRequest对象p使用使用XMLHttpRequest对象示例对象示例此示例使用此对象网页的实现动态显示。页面上有此示例使用此对象网页的实现动态显示。页面上有几个链接,分别点击,可以显示不同的文字或图片,或几个链接,分别点击,可以显示不同的文字或图片,或者清除显示的文字或图片。下面是程序:者清除显示的文字或图片。下面是程序:中国科大Ajax编程技术4.2 创建XMLHttpRequest对象/index.htm Ajax实例展示实例展示 显示联系我们显示联系我们 显示日历时间显示日历时间 显示广告图片显示广告图片 清除联系我们清除联系我们 清除日历时间清除
12、日历时间 清除广告图片清除广告图片 中国科大Ajax编程技术4.2 创建XMLHttpRequest对象/XHRequest.jsvar xHRObject=false;if(window.XMLHttpRequest)xHRObject=new XMLHttpRequest();else if(window.ActiveXObject)xHRObject=new ActiveXObject(Microsoft.XMLHTTP);function sendRequest(data)if(data=delContacts)box1.innerHTML=;else if(data=delCalen
13、dar)box2.innerHTML=;else if(data=delAdverts)box3.innerHTML=;else var bodyofrequest=getBody(data);xHRObject.open(POST,display.php,true);xHRObject.setRequestHeader(Content-Type,application/x-www-form-urlencoded);xHRObject.onreadystatechange=getData;xHRObject.send(bodyofrequest);function getBody(data)v
14、ar argument=value=;argument+=encodeURIComponent(data)return argument;function getData()if(xHRObject.readyState=4&xHRObject.status=200)var serverText=xHRObject.responseText;if(serverText.indexOf(|!=-1)element=serverText.split(|);document.getElementById(element0).innerHTML=element1;中国科大Ajax编程技术4.2 创建X
15、MLHttpRequest对象?php /display.phpswitch($_REQUESTvalue)case Contacts:echo box1|ContactsAnhui,Hefei,USTC;break;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| bre
16、ak;case delAdverts:echo box3| break;?中国科大Ajax编程技术4.2 创建XMLHttpRequest对象p程序运行:运行初始状态入图程序运行:运行初始状态入图1,点击链接后见图,点击链接后见图2:图图1图图2中国科大Ajax编程技术4.3 常见错误p编程常见错误编程常见错误n企图通过双击网页文件运行它;企图通过双击网页文件运行它;nXMLHttpRequest大小写不正确;大小写不正确;n多写了对圆括号:多写了对圆括号:正确:正确:xHRObject.onreadystatechange=getData;错误:错误:xHRObject.onrea
17、dystatechange=getData();必须弄清楚,在必须弄清楚,在JavaScript中:中:n函数名后如果有圆括号,意思就是将函数的返回值赋函数名后如果有圆括号,意思就是将函数的返回值赋给等号左边的变量;给等号左边的变量;n没有圆括号,是将函数本身赋给等号前的变量。没有圆括号,是将函数本身赋给等号前的变量。中国科大Ajax编程技术4.3 常见错误p同源问题同源问题XMLHttpRequest对象有些问题来自于同源问题。在较早版本对象有些问题来自于同源问题。在较早版本的浏览器中,可以运行来自任何源的任何脚本,由此带来很严重的的浏览器中,可以运行来自任何源的任何脚本,由此带来很严重的安
18、全隐患。因此,处于安全的考量,安全隐患。因此,处于安全的考量,“同源策略同源策略”被要求强制执行。被要求强制执行。即即只有来自同一域、同一协议和同一端口的脚本才可以运行只有来自同一域、同一协议和同一端口的脚本才可以运行。IE不检验它从不检验它从XMLHttpRequest对象中取回的字段。其中的一对象中取回的字段。其中的一个字段就是个字段就是HTTPREFERER,它包含用户所浏览页面的,它包含用户所浏览页面的URL/域名域名(注意:该字段的值并不总是一个注意:该字段的值并不总是一个)。这意味着这意味着Referer完全可以在客户端进行伪造。完全可以在客户端进行伪造。IE这个的这个这个的这个安
19、全漏洞安全漏洞Referer值不可信。解决的办法之一是,我们可以在编写值不可信。解决的办法之一是,我们可以在编写Cookie时,将域名时,将域名/服务器添加到服务器添加到cookie中,以便验证发出的和接中,以便验证发出的和接收的同源。收的同源。中国科大Ajax编程技术4.3 常见错误p缓存控制:缓存控制:IE主动缓存主动缓存为了节约带宽资源,浏览器会在本地缓存页面,然为了节约带宽资源,浏览器会在本地缓存页面,然后从缓存中找出该页面而不是从源服务器下载页面。后从缓存中找出该页面而不是从源服务器下载页面。这样一来,当页面更新后,可能页面并没有显示这这样一来,当页面更新后,可能页面并没有显示这种更
20、新。解决的办法是,强制停止缓存。可以在网页中种更新。解决的办法是,强制停止缓存。可以在网页中插入如下代码:插入如下代码:这样足以使浏览器重载该页面。这样足以使浏览器重载该页面。但如果使用但如果使用XMLHttpRequest对象,且请求中包含对象,且请求中包含GET指令,那么指令,那么IE将始终缓存该页面,而决不会重载该页面将始终缓存该页面,而决不会重载该页面。中国科大Ajax编程技术4.3 常见错误p缓存问题的解决方法缓存问题的解决方法我们有三种办法来解决缓存造成的问题。我们有三种办法来解决缓存造成的问题。1.在在GET请求后添加请求后添加querystring,并确保每次运行时,并确保每次
21、运行时,querystring值都不一样。将日期作为值都不一样。将日期作为querystring值是值是一个好主意:一个好主意:1.xHRObject.open(“GET”,”display.php?id=“+Number(new Date)+”&value=“+data,true);2.这种这种“每次输入不同的每次输入不同的querystring值值”的解的解决方法,从原理上将是一种回避策略。决方法,从原理上将是一种回避策略。中国科大Ajax编程技术4.3 常见错误2.设置设置HTTP头部的头部的If-Modified-Since为一个过期的时间:为一个过期的时间:3.xHRObject.o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Ajax 编程 技术 第四
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内