AJAX技术基础(笔记)

AJAX技术基础

一、AJAX技术概述

是一种客户端技术,实现客户浏览器和服务器的异步交互。
AJAX可以在不刷新整个页面的情况下使用JavaScript操作DOM对象实现页面动态更新

1.定义:

AJAX是Asynchronous JavaScript and XML的缩写(异步JavaScript与xml)
 为解决客户发出请求时,服务器把整个页面都发送给客户端的问题。(只需局部更新)

2.相关技术简介:

HTML和CSS
 实现数据信息的统一化、标准化显示
DOM
 实现浏览器丰富的动态显示效果
XML和XST
 进行浏览器和服务器的数据交换和处理
XMLHttpRequest
 实现客户与服务器之间的异步请求和响应

2.1 XML和XST简介

XML(eXtensible Markup Language 可扩展的标记语言)
 在HTML和SGML(SGML:Standard Generalized Markup Language)的基础上发展起来,吸取了优点,克服了SGML过于复杂和HTML的局限性的缺点
XSL(eXtensible StyleSheet Language 可扩展的样式单语言)
 用来转换XML文档结构的语言。XSL可以从一个XML文档中提取信息,并使用该信息创建另一个XML文档

2.2XMLHttpRequest

 XMLHttpRequest是浏览器中定义的对象,是AJAX技术中的核心对象
 通过JS脚本可以创建XMLHttpRequest对象

二、XMLHttpResquest对象

概述:

 使用XMLHttpRequest对象,用户可以直接从Web服务器检索数据,或向Web服务器提交XML数据而不需要刷新整个页面。
 XML数据在客户端使用DOM与XSLT转换成HTML

1.创建XMLHttpRequest对象

 在使用XMLHttpRequest对象发送请求和处理响应之前,必须使用JS创建一个XMLHttpRequest对象。
 大多数浏览器把XMLHttpRequest实现为一个本地对象,而低版本的IE浏览器把XMLHttpRequest实现为一个ActiveX对象。所以在创建之前需要检查浏览器是否支持XMLHttpRequest对象

<%-- 跨浏览器的JavaScript脚本创建XMLHttpRequest对象 --%>
<script type="text/javascript">
        var xmlHttp;
        function createXMLHttpRequest(){
            if(window.XMLHttpRequest){
                xmlHttp = new XMLHttpRequest();
            }else{
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
    </script>

2.XMLHttpRequest的常用属性

通过这些属性,在JS脚本中可以判断请求对象的状态,设置事件处理程序,检索服务器响应等。

onreadystatechange
 为异步请求设置事件处理程序
  每当XMLHttpRequest对象的状态发生改变时都会触发这个事件处理器,通常会调用一个js函数
readyState
 该属性表示请求的状态
  0:未初始化
  1:正在加载
  2:已加载
  3:交互中
  4:完成
responseText
 检索服务器响应,并表示为文本
responseXML
 检索服务器响应,并表示为XML DOM对象
status
 检索服务器的HTTP状态码
  例如,404(表示Not Found),200(表示OK)
statusText
 检索服务器的HTTP状态码的文本
  例如状态码为404时:NotFound
responseBody
 检索响应体
  该属性时IE7以后版本的window对象,但不是W3C的规范

3.XMLHttpRequest的常用方法

abort()  取消当前HTTP请求


getAllResponseHeaders() 返回所有的响应头
  如果readyState属性的值不是3或4,则返回null


getResponseHeader(string header) 返回指定的响应头
  如果readyState属性的值不是3或4,则返回null


open(string method, string url, boolean asych, string username, string password)  打开一个HTTP请求,但还没有发送请求(后三个参数是可选的)
  调用open()将readyState的值设为1,responseText、responseXML、status和statusText属性设置初始值。
  method:在open()中需要指定使用的HTTP方法(GET、POST或PUT)
  url:服务器的URL(相对或绝对路径)
  asych:指示这个调用时异步还是同步,默认值是true,表示请求是异步的。如果是false,浏览器会等待。知道服务器响应为止。
  username、password:指定服务器端验证的 用户名和密码


send(data)  向服务器发送HTTP请求并检索响应
  在调用send()后,readyState属性被设置为2,当请求完成时,readyState属性被设置为4
  data:可以是字符串、无符号字节数组或XML、DOM对象等。发送的数据是可选的,data可以为null。
根据open()中的asych的参数,send可以是同步或异步的。同步:send()只有在接收到全部响应后才返回;异步:该方法立刻返回。


setRequestHeaders(string header, string value)  设置请求的HTTP头
  header:请求头名
  value:请求头值

4.一个简单的示例

下面是一个简单的HTML页面。其中有一个按钮,当单击该按钮时将向服务器发送一个异步请求。服务器将发回一个简单的静态文本作为响应。在处理这个响应时,会在警告窗中显示该文本文件的内容。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>simple XMLHttpRequest</title>
    <script type="text/javascript">
        //创建XMLHttpRequest对象函数
        var xmlHttp;
        function createXMLHttpRequest(){
            if(window.XMLHttpRequest){
                xmlHttp = new XMLHttpRequest();
            }else{
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        //
        function startRequest(){
            //创建XMLHttpRequest对象
            createXMLHttpRequest();
            //每当XMLHttpRequest对象的状态发生改变时都会触发这个事件处理器,通常会调用一个js函数(绑定回调函数)
            xmlHttp.onreadystatechange = handleStateChange;
            //打开一个HTTP请求,此时还未发送请求
            xmlHttp.open("GET","simpleResponse.xml",true);
            //向服务器发送HTTP请求并检索响应
            xmlHttp.send(null);
        }
        //回调函数
        function handleStateChange() {
            document.getElementById("01div").innerText = "Hello";
            if(xmlHttp.readyState == 4){
                document.getElementById("01div").innerText = "Hello1";
                if(xmlHttp.status == 200){
                    document.getElementById("01div").innerText = "Hello2";
                }
            }
        }
    </script>
</head>
<body>
    <form action="#">
        <input type="button" value="开始异步请求" onclick="startRequest();"/>
    </form>
    <div id="01div">div</div>
</body>
</html>

5.AJAX的交互模式

在这里插入图片描述

1)客户触发事件

2)创建XMLHttpRequest对象

3)向服务器发出请求
a.发送请求前,应通过XMLHttpRequest对象的onreadystatechange属性设置回调函数
b.调用open()和send()
如果open()的方法设置为post,则需要设置XMLHttpRequest对象的Content-Type首部xmlHttp.setRequestHeader(“Content-Type”,“application/x-www-form-urlencoded”)
如果没有数据作为请求体的一部分发送,data参数为null

4)服务器处理请求返回响应
服务器响应
请求的是静态资源:服务器返回该资源。
请求的是动态资源:
服务器执行该资源,然后返回
两个访问服务器响应的属性
responseText
responseXML
XMLHttpRequest对象只能处理text/html类型的结果
如果请求的是动态资源(例如Servlet),则需要将Content-Type响应头设置为text/xml
避免浏览器在本地缓存结果,需要将Cache-Control响应头设置为no-cache

5)通过回调函数处理结果

6)更新HTML DOM对象
js脚本可以使用DOM API获得HTML的每个元素的引用。一般用getElementById(id的属性值),修改元素内容常用的方法是设置元素的innerHTML属性值

三、DOM和JavaScript

四、AJAX的常用应用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值