配合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();
    }

}
时间: 2024-10-19 20:24:49

配合JAVA的AJAX使用的相关文章

关于java 与 ajax之间调用的一些总结

java 返回的是一个对象,dataType : "text";java返回的是一个json字符串,dataType : "json";    页面JSON.parse()解析,把json字符串解析成json对象 2,contentType : "application/json",     //发送给服务器的格式dataType : "text",                    //服务器传给页面的格式,如果json

JAVA中AJAX的使用

AJAX<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html> <head> <script type="text/javascript"> /* 标准AJAX模板 */ //使用 false 作为判定条件,它表示还没有创建 XMLHttpRequest 对象 var http_requ

JAVA与AJAX跨域执行

问题来源:一个jsp页面上有个链接需要访问第三方接口,第三方并返回数据给我. 问题思路:首先思考的就是使用AJAX异步方式将他所需的数据给第三方接口,第三方接口返回一系列参数,并根据SUCCESS参数,在页面上弹框显示. 过程解析:页面上写完整AJAX返回JSON数据发现不管怎么样都执行error,经过一系列的查找找到问题所在为AJAX跨域获取数据只能用JSONP,(伤心,看了API才明白是怎么回事),贴下代码: JSP页面: <%@ page language="java" i

分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解

[博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]https://www.cnblogs.com/m-yb/p/9986309.html分页功能的实现可以使用各种插件, 笔者今日闲来无事, 写了 分页工具类 前后台代码 Java JavaScript 的 实现及思路梳理.供大家参考.分页功能的需求一般有: 当前页/每页条数/总页数/总记录数/起始记录数/数

[Selenium+Java] Handling AJAX Call in Selenium Webdriver

Original URL: https://www.guru99.com/handling-ajax-call-selenium-webdriver.html Handling AJAX Call in Selenium Webdriver Ajax is a technique used for creating fast and dynamic web pages. This technique is asynchronous and uses a combination of Javasc

Java学习--Ajax介绍及使用

一.使用Ajax 1.什么是ajax? 是一种用来改善用户体验的技术,本质上是利用浏览器提供的一个     特殊对象(XMLHttpRequest对象,一般也可以称之为ajax对象)向     服务器发送异步请求:服务器返回部分数据,浏览器利用这些数据     对当前页面做部分更新:整个过程,页面无刷新,不打断用户的操作.     注:         异步请求,指的是,当ajax对象发送请求时,浏览器不会销毁     当前页面,用户仍然可以对当前页面做其它操作 2.获取ajax对象 funct

java.net.Decoder 配合java.net.Encoder使用解决url参数中文乱码问题【2014-11-17】

1.解码规则 //解释一下:解码规则对应着编码规则,类似对称加密算法 //解码规则:1.数字和字母保持原样: 2."."."-"."_"."*"保持原样:"+"号解码为" "(空一格字符串): 3.%xy根据解码编码进行解码: 2.解码方法 //解释一下:解码方法和编码方法差不多 //2个方法:decode(String s)和decode(String s,String enc) //

Java:ajax跨域问题

跨域特性: 是浏览器做出的跨域限制 跨域:请求不是本域的,协议.域名.端口,任何一个不一样,浏览器就会认为跨域 跨域只针对XHR(xmlhttprequest)请求,看下面的type 根据特性一解决: chrome --disable-web-security --user-data-dir   或者   就可以了 JSONP(JSON with Padding): 请求实例: url: 'xxxx:423.5.25/xxx/dfsaf' dataType: 'jsonp' 浏览器会不当做xhr

Java 爬虫学习

Java爬虫领域最强大的框架是JSoup:可直接解析具体的URL地址(即解析对应的HTML),提供了一套强大的API,包括可以通过DOM.CSS选择器,即类似jQuery方式来取出和操作数据.主要功能有: 从给定的URL.文件.字符串中,获得HTML代码. 然后通过DOM.CSS选择器(类jQuery方式)来查找.取出数据:先找到HTML元素,然后获取其属性.文本等. API初步学习: 上面提到了三种方式,获取HTML文档(JSoup的Document对象的结构是:<html><head