zoukankan      html  css  js  c++  java
  • AJAX入门

    编写步骤
    1、测试与服务器的通信
    a、创建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;
                         }
    
    var xhr = createXmlHttpRequest();

    b、注册状态变化的事件处理:

                    xhr.onreadystatechange=function(){
                        if(xhr.readyState==4){
                            //真正的处理
                            if(xhr.status==200||xhr.status==304){
                                //服务器正确返回
                                var data = xhr.responseText;//服务器返回的数据
                                //把返回的数据写到div中
                                document.getElementById("d1").innerHTML=data;
                            }
                        }
                    }

    c、初始化xhr对象

    xhr.open("GET","/ajaxday02/servlet/ServletDemo1?time="+new Date().getTime());

    d、向服务器发送数据
    xhr.send(null);

    XmlHttpRequest详解(JavaScript对象)

            常用属性:
                readyState:代表着XmlHttpRequest对象的当前状态
                    0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法) 
                    1 (初始化) 对象已建立,尚未调用send方法 
                    2 (发送数据) send方法已调用,但是当前的状态及http头未知 
                    3 (数据传送中) 已接收部分数据,因为响应及http头不全,
                    4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 
                只有为4,客户端操作相应的处理
                -------------------------------------------------
                status:代表服务器的HTTP相应码。200是成功。304服务器端内容没有改变。
                -------------------------------------------------
                responseText:服务器返回文本数据。
    
                onreadystatechange:当XmlHttpRequest对象的readyState发生变化时,都会触发该事件。

    常用方法:

                open(method,url,isAsync):初始化XmlHttpRequest对象。
                    method:请求方式。一般使用get或者post
                    url:请求的服务器地址。可以使用相对路径或者绝对路径。
                            特别注意:如果该地址没有变化,浏览器一般不会再次发出请求的。解决办法,加上一个时间戳。
                                /ajaxday02/servlet/ServletDemo1?time="+new Date().getTime()
                    isAsync:是否是异步请求。默认是true。
                send(requestData):向服务器发送请求数据。没有传递null。
                    数据时用在POST请求方式的。数据形式:username=admin&password=123
    
            通过XmlHttpRequest向服务器发送POST请求:
                //设置请求消息头,告知服务器,发送的正文数据的类型。
                    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//固定写法
                    //发送数据
                    xhr.send("username=admin&password=123");

    4.4服务端返回的数据

    • HTML数据
    • responseText:他是XmlHttpRequest对象的一个属性。服务器返回的数据会封装到此属性中。
    • XML数据,responseXML:返回的是xml对象的DOM对象。

    实例

    get方式与服务器交互

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>AJAX进行get方式的请求测试</title>
    </head>
    <body>
        <input type="button" id="b1" name="b1" value="测试与服务器的通信"/>
        <div id="d1">
    
        </div>
        <script type="text/javascript">
    
            window.onload=function(){//当页面被全部加在完毕后再执行
                //给b1按钮注册事件
                document.getElementById("b1").onclick=function(){
                    //AJAX代码
    
                    //得到XmlHttpRequest对象
                    var xhr = createXmlHttpRequest();
                    //xhr的readyState改变都会触发onreadystatechange事件
    
                        /*
                         * readyState的取值:
                         *  0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法) 
                         *  1 (初始化) 对象已建立,尚未调用send方法 
                         *  2 (发送数据) send方法已调用,但是当前的状态及http头未知 
                         *  3 (数据传送中) 已接收部分数据,因为响应及http头不全, 
                         *  4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 
    
                         */
                    xhr.onreadystatechange=function(){
                        if(xhr.readyState==4){
                            //真正的处理
                            if(xhr.status==200||xhr.status==304){
                                //服务器正确返回
                                var data = xhr.responseText;//服务器返回的数据
                                //把返回的数据写到div中
                                document.getElementById("d1").innerHTML=data;
                            }
                        }
                    }
                    //建立与服务器的连接
                        /*
                         * oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);
                         * bstrMethod:请求方式。一般使用get或post
                         * bstrUrl:请求的资源地址:可以绝对或相对路径
                         * varAsync:是否是异步请求。默认是true。
                         */
                    xhr.open("GET","http://localhost:8080/Test/servlet/ServletDemo1?time="+new Date().getTime());
                    //发送数据
                        //oXMLHttpRequest.send(varBody);  varBody:请求参数
                    xhr.send(null);
    
                    //接收服务器返回的数据
    
    
                }
            }
            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;
             }
    
        </script>
    </body>
    </html>

    服务器端代码

    package cn.itcast.controller;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/servlet/ServletDemo1")
    public class ServletDemo1 extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.write("hello ajax");
            System.out.println("ServletDemo1执行了");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request,response);
        }
    
    }

    post方式与服务器交互

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>AJAX进行post方式的请求测试</title>
    </head>
    <body>
        <input type="button" id="b1" name="b1" value="测试与服务器的通信"/>
        <div id="d1">
    
        </div>
        <script type="text/javascript">
    
            window.onload=function(){
                document.getElementById("b1").onclick = function(){
                    //获取xmlhttpRequest对象
                    var xhr = createXmlHttpRequest();
                    //注册状态变化的回调函数
                    xhr.onreadystatechange = function(){
                        if (xhr.readyState == 4) {
                            if (xhr.status == 200 || xhr.status == 304) {
                            //什么都不做
                            }
                        }
                    }
                    //初始化xmlhttpRequest对象,即open
                    xhr.open("POST", "/Test/servlet/ServletDemo2?time=" + new Date().getTime());
                    //设置请求消息头,告知服务器,发送的正文数据的类型
                    //不设置这句无法接收数据   
                    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                    //发送数据
                    xhr.send("username=admin&password=123");
                }
            }
            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;
             }
    
        </script>
    </body>
    </html>

    服务器代码

    package cn.itcast.controller;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class ServletDemo2
     */
    @WebServlet("/servlet/ServletDemo2")
    public class ServletDemo2 extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.write("hello abc");
            System.out.println("ServletDemo2执行了");
        }
    
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            System.out.println("ServletDemo2 doPost running");
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            System.out.println(username+":"+password);
        }
    
    }

    问题

    eclipse启动tomcat, http://localhost:8080无法访问

    参考链接

    eclipse启动tomcat, http://localhost:8080无法访问 - 海邻网络IT技术网 - 博客频道 - CSDN.NET

    AJAX问题之XMLHttpRequest status = 0

    好像是因为在本地打开与在服务器打开的HTML的路径是不一样的

    参考链接

    AJAX问题之XMLHttpRequest status = 0 - iaiti的专栏 - 博客频道 - CSDN.NET

    完成

  • 相关阅读:
    FastReport报表控件使用技巧总结
    WinAPI: ShellExecute
    Delphi Excel 操作大全
    DATEADD和DATEDIFF函数、其他日期处理方法 、已打开的端口、FORMAT函数
    javascript-时间戳
    js-jquery-插件开发(二)【最终插件是最后一个,中间是过程】
    js-jquery-插件开发(一)
    Java-idea-eclipse-快捷键【mac,win】
    Java-idea-生成for循环
    Java-idea-设置类头注释和方法注释
  • 原文地址:https://www.cnblogs.com/jjx2013/p/6223674.html
Copyright © 2011-2022 走看看