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

完成

posted @ 2016-05-09 10:25  RicardoMJiang  阅读(150)  评论(0编辑  收藏  举报