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

    完成

  • 相关阅读:
    December 23rd 2016 Week 52nd Friday
    December 22nd 2016 Week 52nd Thursday
    December 21st 2016 Week 52nd Wednesday
    December 20th 2016 Week 52nd Tuesday
    December 19th 2016 Week 52nd Sunday
    December 18th 2016 Week 52nd Sunday
    uva294(唯一分解定理)
    uva11624Fire!(bfs)
    fzu2150Fire Game(双起点bfs)
    poj3276Face The Right Way
  • 原文地址:https://www.cnblogs.com/jjx2013/p/6223674.html
Copyright © 2011-2022 走看看