Ajax(一)

1. AJAX介绍

  AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

  AJAX 是一种用于创建快速动态网页的技术。

  通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。

  AJAX作用:

  AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。

  使用Javascript向服务器提出请求并处理响应而不阻塞用户!核心对象XMLHTTPRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与Web服务器交换数据。

  AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。

  AJAX 可使因特网应用程序更小、更快,更友好。

2. 如何使用AJAX

  2.1 创建一个XMLHTTPRequest对象

function getXMLHttpRequest() {
  var xmlhttp;
  if (window.XMLHttpRequest) {// code for all new browsers   xmlhttp = new XMLHttpRequest(); } else if (window.ActiveXObject) {// code for IE5 and IE6   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } return xmlhttp; }

  2.2 设置回调函数

  目的是服务器响应完成后,浏览器可以知道,并完成后续操作:

xmlHttp.onreadystatechange=function(){};

  open操作

  设置访问资源方式和请求路径:

xmlHttp.open(“GET”,”/day/ajax”);

  send操作

  发送请求:

xmlhttp.send(null);

3. XMLHTTPRequest API详解

  Ajax 的核心是 JavaScript 对象 XmlHttpRequest。该对象在 Internet Explorer 5 中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest 使您可以使用 JavaScript 向服务器提出请求并处理响应,而不阻塞用户。XMLHttpRequest 对象提供了对 HTTP 协议的完全访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。XMLHttpRequest 可以同步或异步地返回 Web 服务器的响应,并且能够以文本或者一个 DOM 文档的形式返回内容。

  3.1 onreadystatechange属性

    XMLHttpRequest对象的状态改变时会调用的一个函数。

  3.2 readyState属性

    对于XMLHttpRequest对象,它有一个属性readyState,它有五个状态:

    0——创建XMLHttpRequest对象

    1——当open时

    2——当send时

    3——响应头已经返回,但响应正文没有完成,也就是响应没有完全完成.

    4——响应完成了

    一般情况下,在回调的函数中,我们都是判断

    if(xmlhttp.readyState==4&&xmlhttp.status==200)

    来接收服务器端响应的信息。

  3.3 statues属性

    由服务器返回的 HTTP 状态代码,如 200 表示成功,而 404 表示 "Not Found" 错误。当 readyState 小于 3 的时候读取这一属性会导致一个异常。

  3.4 responseText属性

    目前为止为服务器接收到的响应体(不包括头部),或者如果还没有接收到数据的话,就是空字符串。

    如果 readyState 小于 3,这个属性就是一个空字符串。当 readyState 为 3,这个属性返回目前已经接收的响应部分。如果 readyState 为 4,这个属性保存了完整的响应

  体。

    如果响应包含了为响应体指定字符编码的头部,就使用该编码。否则,假定使用 Unicode UTF-8。

  3.5 responseXML属性    

    对请求的响应,解析为 XML 并作为 Document 对象返回。

  3.6 open方法

    初始化 HTTP 请求参数,例如 URL 和 HTTP 方法,但是并不发送请求。

    xmlhttp.open(请求方式,url);

    请求方式: POST  GET

    路径:客户端路径 格式 /工程名/资源路径

    如果是GET方式,想要向服务器发送请求,并且携带请求参数,可以直接在url后面连接。

    如果是POST方式,想要向服务器发送请求,并且携带请求参数,我们需要在send时传递参数

  3.7 send方法

    发送 HTTP 请求,使用传递给 open() 方法的参数,以及传递给该方法的可选请求体。

    如果请求方式是post,并且要携带参数,可以通过send的参数来传递

  3.6 setRequestHeader方法

    向一个打开但未发送的请求设置或添加一个 HTTP 请求。

    如果请求方式是POST,并且要携带参数,需要设置一个请求头.

    setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");

  3.7 解决中文乱码问题  

xmlhttp.open("get","{pageContext.request.contextPath}/ajax?username="+encodeURI(document.getElementById("username").value));

4. 两个简单的案例

  

创建XMLHttpRequest
function createXMLHttpRequest() {
    var xmlHttp;
    try { // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    } catch (e) {
        try {// Internet Explorer
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
            }
        }
    }

    return xmlHttp;
}
//get请求
function
loadData() { // 1.创建异步XMLHttpRequest对象 var xhr = createXMLHttpRequest(); // 2.设置状态改变触发一个函数 xhr.onreadystatechange = function(){ // 回调函数. if(xhr.readyState == 4){// 请求发送完成 if(xhr.status == 200){// 响应也正确 var data = xhr.responseText; document.getElementById("d1").innerHTML=data; } } } // 3.打开一个连接: xhr.open("GET","/WEB15/ServletDemo1",true); // 4.发送请求 xhr.send(null); }
//post请求
function
loadData(){ // 1.创建异步对象 var xhr = createXMLHttpRequest(); // 2.设置状态改变触发的函数 xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ if(xhr.status == 200){ document.getElementById("d1").innerHTML=xhr.responseText; } } } // 3.打开连接 xhr.open("POST","/WEB15/ServletDemo2",true); xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); // 4.发送数据 xhr.send("name=李四&password=456"); }

  用户姓名校验案例:

function checkUsername(){
    // 获得文本框的值:
    var username = document.getElementById("username").value;
    // 创建对象:
    var xhr = createXMLHttpRequest();
    // 2.状态改变触发一个函数
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                // 获得到响应内容:
                var data = xhr.responseText;
                if(data == 1){
                    // 可以使用
                    document.getElementById("s1").innerHTML = "<font color='green'>用户名可以使用</font>";
                    document.getElementById("regBut").disabled=false;
                }else if(data == 2){
                    // 已经存在
                    document.getElementById("s1").innerHTML = "<font color='red'>用户名已经被使用</font>";
                    document.getElementById("regBut").disabled=true;
                }
            }
        }
    }
    // 3.打开连接
    xhr.open("GET","/WEB15/ServletDemo3?username="+username,true);
    // 4.发送数据
    xhr.send(null);
}

 

posted on 2018-10-30 16:17  岁月磨平青春的棱角  阅读(93)  评论(0)    收藏  举报

导航