简单认识XMLHttpRequest

demo001.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
        //首先,新建一个XMLHttpRequest的实例。
        var xhr = new XMLHttpRequest();
        //然后,向远程主机发出一个HTTP请求。xmlHttpRequest.open(method,url,true or false);  true代表异步,为false代表同步
        xhr.open('GET', 'http://localhost:8090/First/TryServlet');
        //设置HTTP请求的时限
        xhr.timeout = 3000;
        //用来指定回调函数。
        xhr.ontimeout = function(event){
           alert('请求超时!');
        }
        //如果请求类型是post,send方法要有参数。
        xhr.send();
        //监控XMLHttpRequest对象的状态变化
        xhr.onreadystatechange = function(){
        //xhr的readystate属性(值为:0,1,2,3,4)用来说明此次请求的进展。我们一般关心的是值为4(请求已完成)的情况。这里要注意的是:当readystate值为4(请求完成)时,请求不一定成功,请求成功与否需要关注status属性readystate值的每一次改变都会触发一次readystatechange事件,我们一般在这个事件中查看readystate的值,在readystate值为4并且status属性值为200时,做相应的处理。
            if(xhr.readyState == 4 && xhr.status == 200 ){

              console.log(xhr.responseText);
            }else{
            //xhr的status属性(值为:200,404,500,503这种)说明此次请求成功与否,我们一般关心的是值为200(请求已成功)的情况。
              alert(xhr.readyState);
              alert(xhr.status);
            }
        }
    </script>
</head>
<body>

</body>
</html>

demo002.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
        var xhr = new XMLHttpRequest();
        //HTML 5新增了一个FormData对象,可以模拟表单
        //var formData = new FormData();
        //就相当于向后台传进参数username='张三'&age='24',简化了表单提交的操作
        //formData.append('username','张三');
        //formData.append('age','24');
        xhr.open('post', 'http://localhost:8090/First/TryServlet',true);
        不加上这句,那么后台Request.getParameter()获取不到参数数值
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
        xhr.send("user=123");

        xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200 ){
              console.log(xhr.responseText);
        }else{
              alert(xhr.readyState);
              alert(xhr.status);
            }
        }
    </script>
</head>
<body>

</body>
</html>

后台

package com.day1.cn;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TryServlet extends HttpServlet {
    private String message;
    public static Connection conn = null;
    public static Statement st = null;
    public static ResultSet rs = null;
    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

    /**
     * Constructor of the object.
     */
    public TryServlet() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    /**
     * The doGet method of the servlet. <br>
     * 
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request
     *            the request send by the client to the server
     * @param response
     *            the response send by the server to the client
     * @throws ServletException
     *             if an error occurred
     * @throws IOException
     *             if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // response.addHeader("Access-Control-Allow-Origin",
        // "http://10.1.8.167:1234");
        response.addHeader("Access-Control-Allow-Origin", "*");
        String username = request.getParameter("username");
        String age = request.getParameter("age");
        if(username!=null&&age!=null)
        {
            System.out.println(username+age);
        }

        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods",
                "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
        response.setHeader(
                "Access-Control-Allow-Headers",
                "Origin, X-Requested-With, Content-Type,Token,Accept, Connection, User-Agent, Cookie");
        response.setHeader("Access-Control-Max-Age", "3628800");
        response.setContentType("text/html");
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://10.1.8.167:3306/scene";
        String user = "scene";
        String pass = "scene";
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, user, pass);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            st = conn.createStatement();
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        String sql = "select * from admin_user";
        try {
            rs = st.executeQuery(sql);
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            if (rs.next()) {
                // 将rs类型转换为list类型


                ResultSetMetaData md = rs.getMetaData();

                int columnCount = md.getColumnCount();

                while (rs.next()) {

                    Map<String, Object> rowData = new HashMap<String, Object>();

                    for (int i = 1; i <= columnCount; i++) {

                        rowData.put(md.getColumnName(i), rs.getObject(i));

                    }

                    list.add(rowData);

                }
                System.out.println(list);
            }
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

//        String json=JSON.toJSONString(list);
        PrintWriter out = response.getWriter();
        out.print(list);
        try {
            rs.close();
            st.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // response.addHeader("Access-Control-Allow-Origin",
        // "http://10.1.8.167:1234");
        response.addHeader("Access-Control-Allow-Origin", "*");
        String username = request.getParameter("user");
        String age = request.getParameter("user");
        if(username!=null&&age!=null)
        {
            System.out.println(username+age);
        }

        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods",
                "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
        response.setHeader(
                "Access-Control-Allow-Headers",
                "Origin, X-Requested-With, Content-Type,Token,Accept, Connection, User-Agent, Cookie");
        response.setHeader("Access-Control-Max-Age", "3628800");
        response.setContentType("text/html");
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://10.1.8.167:3306/scene";
        String user = "scene";
        String pass = "scene";
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, user, pass);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            st = conn.createStatement();
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        String sql = "select * from admin_user";
        try {
            rs = st.executeQuery(sql);
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            if (rs.next()) {
                // 将rs类型转换为list类型


                ResultSetMetaData md = rs.getMetaData();

                int columnCount = md.getColumnCount();

                while (rs.next()) {

                    Map<String, Object> rowData = new HashMap<String, Object>();

                    for (int i = 1; i <= columnCount; i++) {

                        rowData.put(md.getColumnName(i), rs.getObject(i));

                    }

                    list.add(rowData);

                }
                System.out.println(list);
            }
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

//        String json=JSON.toJSONString(list);
        PrintWriter out = response.getWriter();
        out.print(list);
        try {
            rs.close();
            st.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * Initialization of the servlet. <br>
     * 
     * @throws ServletException
     *             if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
        message = "Hello World";
    }
    

}
可以参考:http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html

https://www.imooc.com/article/13663

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值