配合JAVA的AJAX使用

摘要:
readyState属性用来返回当前的请求状态,有五个可选值。statusText属性的含义与status属性非常类似,不过statusText用文本的形式表示服务器的响应状态,而status以状态码的形式表示。onreadystatechange是一个事件触发器,其值往往是一个JavaScript的函数名。responseXML用来接收服务器的响应,以XML的形式存在,这个对象可以解析为一个DOM对象,进一步使用DOM的API更新客户端页面。GET方式解析XML的AJAXjs代码:varxmlHttp;//创建XMLHttpRequest对象functioncreateXMLHttpRequest(){if{//MicrosoftxmlHttp=newActiveXObject;}elseif{xmlHttp=newXMLHttpRequest();}}functionvalidate(){//创建xmlHttp对象createXMLHttpRequest();//使用DOM,得到id值是username的域varusername=document.getElementById;varurl="ValidateUsernameServlet?

概要

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代码:

varxmlHttp;
            //创建XMLHttpRequest对象
functioncreateXMLHttpRequest() {
                if (window.ActiveXObject) {//Microsoft
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                } else if(window.XMLHttpRequest) {
                    xmlHttp = newXMLHttpRequest();
                }
            }
            
functionvalidate() {
                //创建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);
            }
            
functioncallback() {
                //当客户端完全接收完服务器的响应后,并且状态为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);
                    }
                }
            }
functionsetMessage(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 extendsHttpServlet {

    
    public voiddoGet(HttpServletRequest request, HttpServletResponse response)
            throwsServletException, IOException {

        doPost(request,response);    
    }

    
    public voiddoPost(HttpServletRequest request, HttpServletResponse response)
            throwsServletException, 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 = newXMLHttpRequest();                
            }
        }

        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代码:

varxmlHttp;
     //创建XMLHttpRequest对象
        functioncreateXMLHttpRequest() {
            if(window.ActiveXObject) {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            else if(window.XMLHttpRequest) {
                xmlHttp = newXMLHttpRequest();                
            }
        }

        functionvalidate() {
       
        //创建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));
            

        }

        functioncallback() {
               //当客户端完全接收完服务器的响应后,并且状态为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 extendsHttpServlet {

    public voiddoGet(HttpServletRequest request, HttpServletResponse response)
            throwsServletException, IOException {

        doPost(request, response);
    }

    public voiddoPost(HttpServletRequest request, HttpServletResponse response)
            throwsServletException, 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();
    }

}

免责声明:文章转载自《配合JAVA的AJAX使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇服务器维护 Windows Service 2008 R2 Enterprise Service Pack 1WPF技术点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

layer 弹出框 回传事件获取弹出框的一些属性

$('.opendialog').click(function () { var ids = $(this).attr("data-id"); //alert(ids); layer.open({ id: "add",...

js中几种实用的跨域方法原理详解

什么是同源策略?同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。 同源策略限制以下几种行为: 1、Cooki...

Nodejs与ES6系列1:变量声明

1、声明变量 在JS当中一个变量的作用域(scope)是程序中定义这个变量的区域。变量分为两类,全局(global)的和局部的。其中全局变量的作用域是全局性的,即在JavaScript代码中,它处处都有定义。而在函数之内声明的变量,就只在函数体内部有定义。它们是局部变量,作用域是局部性的。函数的参数也是局部变量,它们只在函数体内部有定义。 1.1 var变...

rpm安装时报error: can't create transaction lock on /var/lock/rpm/transaction的处理

安装relocatable的rpm时候,通常会碰到下面的错误: error: can't create transaction lock on /var/lock/rpm/transaction 原因是不能创建锁,解决办法如下: --define"_rpmlock_path$rpmdbPath/transaction" 指定这个_rpmlock_path...

html5自动横屏的方法

html5自动横屏的方法<pre>var evt = "onorientationchange" in window ? "orientationchange" : "resize";window.addEventListener(evt, function() {console.log(evt);var width = document.do...

JQ监听滚动条高度

JQ监听滚动条高度 $(document).scroll(function() { var scroH = $(document).scrollTop(); //滚动高度 var viewH = $(window).height(); //可见高度 var contentH = $(document).height(); /...