zoukankan      html  css  js  c++  java
  • 配合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();
        }
    
    }
  • 相关阅读:
    Geoserver通过ajax跨域访问服务数据的方法(含用户名密码认证的配置方式)
    123
    递归____蛮好的例子 蓝桥
    博弈_____威佐夫博奕
    123123
    sort
    int ,long , long long类型的范围
    数学推导_循环小数转分数
    下一步:结构体 背包 库函数
    回溯____蓝桥 棋盘
  • 原文地址:https://www.cnblogs.com/lm970585581/p/7220382.html
Copyright © 2011-2022 走看看