AJAX简述

1.概述

异步的js和xml

可以通过AJAX实现异步访问服务器,并局部刷新网页

2.同步交互与异步交互

  • 同步(串行)
    向服务器发送一个请求,必须等待响应结束,才能发起第二个请求,
    在服务器处理期间,浏览器不能干别的事。
    通常会刷新整个页面。
  • 异步(交替)
    向服务器发送一个请求,无须等待响应结束,就能发起第二个请求,
    在服务器处理期间,浏览器可以干别的事。
    通常会刷新局部页面

3.应用场景

百度搜索框
用户名检验
。。。

4.优缺点

  • 优点:
    异步交互,提高了用户的体验。
    服务器只响应了部分数据,而不是整个页面,所以降低了服务器的压力。
  • 缺点:
    AJAX不适用所有场景,比如页面跳转。
    AJAX会增加服务器压力,因为可能会无端增加访问服务器的次数

5.JavaScript实现AJAX

第一步--获取XMLHttpRequest对象

var xmlHttp = ajaxFunction();
function ajaxFunction(){
    var xmlHttp;
    try{
//现代浏览器(IE7+、Firefox、Chrome、Safari 和 Opera)都有内建的 XMLHttpRequest 对象
        xmlHttp = new XMLHttpRequest();
    }catch(e){
        try{
            //IE6.0
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{
                //IE5.0及更早版本
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e){
                alert("...");
                throw e;
            }
        }
    }
    return xmlHttp;
}

第二步--打开与服务器的连接

xmlHttp.open(method, url, async);
  • method: 请求方式, 可以是GET或POST
  • url: 所要访问的服务器中资源的路径如:/servlet/AServlet
  • async: 是否为异步传输, true 表示为异步。传输一般都是true。

第三步--发送请求

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//通知服务器发送的数据是请求参数 
xmlHttp.send("xxxx"); //注意, 如果不给参数可能会造成部分浏览器无法发送请求
xmlHttp.send("username="+username+"&psw="+)
参数:

如果是GET请求, 可以是null, 因为GET提交参数会拼接在url后面。
如果是POST请求, 传入的就是请求参数,如:"username=张飞&psw=123"

第四步--注册监听

在XMLHttpRequest对象的一个事件上注册监听器:onreadystatechange
一共有五个状态:(xmlHttp.readyState)

  • 0状态:表示刚创建XMLHttpRequest对象, 还未调用open()方法。
  • 1状态:表示刚调用open()方法, 但是还没有调用send()方法发送请求。
  • 2状态:调用完了send()方法了, 请求已经开始。
  • 3状态:服务器已经开始响应, 但是不代表响应结束。
  • 4状态:服务器响应结束!(通常我们只关心这个状态)

获取xmlHttp对象的状态:
var state = xmlHttp.readyState;//可能得到0, 1, 2, 3, 4

获取服务器响应的状态码:
var status = xmlHttp.status;

获取服务器响应的内容

var data = xmlHttp.responseText;//得到服务器响应的文本格式的数据
// readyState0 --> 1

/* 注册监听, 时刻监听服务器处理请求的状态 */
xmlHttp.onreadystatechange = function(){
    if(xmlHttp.readyState == 4){
        //状态为4表示服务器已经处理完成, 但是不代表处理成功
        if(xmlHttp.status == 200){//当状态码为200, 表示服务器成功的处理了请求
            var result = xmlHttp.responseText();
            //xxx
        }
    }
}

6.jQuery实现AJAX

$ .get() 或 $ .post()
$.get(url,[data],[callback])
  • url:发送请求的url地址
  • data:可选,向服务器发送的数据,需要json格式
  • callback:可选,回调函数,即请求成功后执行的函数
load()
$(selector).load(url,[data],[callback])
  • $(selector):选择器,可以选中某个元素,并将服务器的返回值填充到这个元素中
  • url:发送请求的url地址
  • data:可选,向服务器发送的数据,需要json格式
  • callback:可选,回调函数,即请求成功后执行的函数
ajax()
$.ajax(url,[data],[async],[type],[success])
  • url:发送请求的url地址
  • data:可选,向服务器发送的数据,需要json格式
  • async:可选,默认是true,表示异步,false为同步
  • type:可选,请求方式
  • success:可选,回调函数,即请求成功后执行的函数