配合JAVA的AJAX使用详解编程语言

概要

Ajax是“Asynchronous JavaScript and XML”的简称,即异步的JavaScript和XML。

readyState属性用来返回当前的请求状态,有五个可选值。分别是0到4,每个值的含义如下描述。 0:“未初始化”状态, 表示已经创建一个XMLHttpRequest对象,但是还没有初始化请求对象。 1:“打开”状态,表示已经调用了XMLHttpRequest对象的open()方法,已经准备好向服务器端发送请求。 2:“发送”状态,表示已经调用了XMLHttpRequest对象的send()方法把一个请求发送到服务器端,但是还没有收到服务器的响应。 3:“正在接收”状态,表示已经接收到HTTP响应头的信息,但是消息体部分还没有完全接收。 4:“已加载”状态,表示响应已经被完全接收。

status属性用来返回服务器的响应状态码,例如200表示OK,一切正常;404表示请求的文件没有找到;500表示内部服务器发生错误等。

statusText属性的含义与status属性非常类似,不过statusText用文本的形式表示服务器的响应状态,而status以状态码的形式表示。例如,statusText值为OK时,表示一切正常,对应status为200;值为Not Found表示文件没有找到,对应status为404。

onreadystatechange是一个事件触发器,其值往往是一个JavaScript的函数名。任何一个状态的变化,不管是readyState还是status的变化,都会触发该事件,并调用指定的JavaScript函数。

responseText属性用来接收服务器端返回的文本内容,以一个字符串的形式存在。使用responseText属性可以直接将返回的内容赋值给某一个域的innerHTML值,显示到客户端。

responseXML用来接收服务器的响应,以XML的形式存在,这个对象可以解析为一个DOM对象,进一步使用DOM的API更新客户端页面。

GET方式解析XML的AJAX

js代码:

var xmlHttp; 
            //创建XMLHttpRequest对象 
function createXMLHttpRequest() { 
                if (window.ActiveXObject) {//Microsoft 
                 
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
                } else if (window.XMLHttpRequest) { 
                    xmlHttp = new XMLHttpRequest(); 
                } 
            } 
             
function validate() { 
                //创建xmlHttp对象 
                createXMLHttpRequest(); 
                //使用DOM,得到id值是username的域 
                var username = document.getElementById("username"); 
                var url = "ValidateUsernameServlet?username=" + escape(username.value); 
                //向服务器端的    ValidateUsernameServlet发送异步请求 
                xmlHttp.open("GET", url, true); 
                //当状态有变化的时候,调用callback方法 
                xmlHttp.onreadystatechange = callback; 
                xmlHttp.send(null); 
            } 
             
function callback() { 
                //当客户端完全接收完服务器的响应后,并且状态为200,也就是正常 
                if (xmlHttp.readyState == 4) { 
                    if (xmlHttp.status == 200) { 
                        //使用responseXML属性,接收服务器端返回的的XML文件 ,使用DOM解析XML          
                         
                        //用以下二种方式都可以得到页面上的值 
                        //var message = xmlHttp.responseXML.getElementsByTagName("message")[0].firstChild.data; 
                        var message = xmlHttp.responseXML.getElementsByTagName("message")[0].childNodes[0].nodeValue 
                        var passed = xmlHttp.responseXML.getElementsByTagName("passed")[0].firstChild.data; 
                        setMessage(message, passed); 
                    } 
                } 
            } 
function setMessage(message, passed) { 
                //使用DOM得到id值为usernamemsg的域,用来显示提示信息     
                var validateMessage = document.getElementById("usernamemsg"); 
                var fontColor = "red"; 
                if (passed == "true") { 
                    fontColor = "green"; 
                } 
                validateMessage.innerHTML = "<font color=" + fontColor + ">" + message 
                        + " </font>"; 
            }

 servlet代码:

public class ValidateUsernameServlet extends HttpServlet { 
 
     
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException { 
 
        doPost(request,response);     
    } 
 
     
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException { 
 
        response.setContentType("text/html;charset=utf-8"); 
        request.setCharacterEncoding("utf-8"); 
         
         
        boolean flag=true; 
        String message=""; 
         
        //用户名可以使用 
        boolean e=true; 
        if(e == true){ 
            message="用户名可以使用"; 
        }else{ 
            flag=false; 
            message="用户名已经存在,请选择使用其他用户名"; 
        } 
         
//        将校验的结果,以XML格式返回给客户端 
         response.setContentType("text/xml;charset=utf-8"); 
         PrintWriter out = response.getWriter();  
        //禁止缓存   HTTP1.0中通过Pragma 控制页面缓存,HTTP1.1中启用Cache-Control 来控制页面的缓存与否 
         //参数:no-cache,浏览器和缓存服务器都不应该缓存页面信息; 
         response.setHeader("Cache-Control","no-cache"); 
         out.println("<?xml version='1.0' encoding='"+"utf-8"+"' ?>"); 
         out.println("<response>"); 
         out.println("<passed>" + flag + "</passed>"); 
         out.println("<message>" + message + "</message>"); 
         out.println("</response>"); 
         out.close(); 
    } 
}

 html代码根据实际需求编写,这里不做演示。

 POST方式解析XML的AJAX

js代码:

 var xmlHttp; 
     //创建XMLHttpRequest对象 
        function createXMLHttpRequest() { 
            if (window.ActiveXObject) { 
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
            }  
            else if (window.XMLHttpRequest) { 
                xmlHttp = new XMLHttpRequest();                 
            } 
        } 
 
        function validate() { 
         
        //创建xmlHttp对象 
            createXMLHttpRequest();  
            //使用DOM,得到id值是username的域 
            var username = document.getElementById("username"); 
           
            var url = "ValidateUsernameServlet";        
            //向服务器端的    ValidateUsernameServlet发送异步请求 
            xmlHttp.open("POST", url, true); 
              
            xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  
            //当状态有变化的时候,调用callback方法 
            xmlHttp.onreadystatechange = callback; 
              
            xmlHttp.send("username="+encodeURI(username)); 
             
 
        } 
 
        function callback() { 
               //当客户端完全接收完服务器的响应后,并且状态为200,也就是正常 
            if (xmlHttp.readyState == 4) {       
                if (xmlHttp.status == 200) {    
                //使用responseXML属性,接收服务器端返回的的XML文件 ,使用DOM解析XML          
                    var message = xmlHttp.responseXML.getElementsByTagName("message")[0].firstChild.data; 
                    var passed = xmlHttp.responseXML.getElementsByTagName("passed")[0].firstChild.data; 
                    setMessage(message, passed);                 
                } 
            } 
        } 
         
        function setMessage(message, passed) {       
        //使用DOM得到id值为usernamemsg的域,用来显示提示信息     
            var validateMessage = document.getElementById("usernamemsg"); 
            var fontColor = "red"; 
            if (passed == "true") { 
                fontColor = "green";                 
            } 
            validateMessage.innerHTML = "<font color=" + fontColor + ">" + message + " </font>"; 
        }

servlet代码与GET方式相同。

POST方式解析文本的AJAX

js代码:

var xmlHttp; 
     //创建XMLHttpRequest对象 
        function createXMLHttpRequest() { 
            if (window.ActiveXObject) { 
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
            }  
            else if (window.XMLHttpRequest) { 
                xmlHttp = new XMLHttpRequest();                 
            } 
        } 
 
        function validate() { 
        
        //创建xmlHttp对象 
            createXMLHttpRequest();  
            //使用DOM,得到id值是username的域 
            var username = document.getElementById("username"); 
           
            var url = "ValidateUsernameServlet2";        
            //向服务器端的    ValidateUsernameServlet发送异步请求 
            xmlHttp.open("POST", url, true); 
             
            xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  
            //当状态有变化的时候,调用callback方法 
            xmlHttp.onreadystatechange = callback; 
              
            xmlHttp.send("username="+encodeURI(username)); 
             
 
        } 
 
        function callback() { 
               //当客户端完全接收完服务器的响应后,并且状态为200,也就是正常 
            if (xmlHttp.readyState == 4) {       
                if (xmlHttp.status == 200) {    
                //使用responseXML属性,接收服务器端返回的的XML文件 ,使用DOM解析XML    
                  var responseText=xmlHttp.responseText; 
                  document.getElementById("usernamemsg").innerHTML=responseText; 
                 
                                    
                } 
            } 
        }

servlet代码:

public class ValidateUsernameServlet2 extends HttpServlet { 
 
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException { 
 
        doPost(request, response); 
    } 
 
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException { 
 
        response.setContentType("text/html;charset=utf-8"); 
        request.setCharacterEncoding("utf-8"); 
 
        boolean flag = true; 
        String message = ""; 
 
        // 用户名可以使用 
        boolean e = true; 
        if (e == true) { 
            message = "用户名可以使用"; 
        } else { 
            flag = false; 
            message = "用户名已经存在,请选择使用其他用户名"; 
        } 
 
        // 将校验的结果,以XML格式返回给客户端 
        response.setContentType("text/xml;charset=utf-8"); 
        PrintWriter out = response.getWriter(); 
        // 禁止缓存 HTTP1.0中通过Pragma 控制页面缓存,HTTP1.1中启用Cache-Control 来控制页面的缓存与否 
        // 参数:no-cache,浏览器和缓存服务器都不应该缓存页面信息; 
        response.setHeader("Cache-Control", "no-cache"); 
        out.println("<font color='red'>" + message + "</font>"); 
        out.flush(); 
        out.close(); 
    } 
 
}

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/11719.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论