核心对象:XMLHTTPRequest 用于在后台与服务器交换数据,可以在不加载整个网页的情况下,对网页的某部分进行更新
建立连接:open(method,url,async) method:请求的类型 GET或者POST url:请求资源的路径 async:true(异步)或false(同步)
发送请求:send(String params) params:只有POST才有请求的参数 注意: GET请求类型:send()方法不起作用,但是不能被忽略 POST请求类型:send()方法起作用,在send()方法被调用之前,使用setRequestHeader()方法设置请求头信息
处理响应:onreadystatechange
readyState:表示当前服务器的通信状态 0-请求未初始化 1-服务器连接已建立 2-请求连接已建立 3-请求处理中 4-请求已完成
status:表示当前服务器端的状态码 200-请求成功 404-网页找不到 500-服务器端错误
获得响应数据形式 responseText:获得服务器端的字符串形式的响应数据 responseXML:获得XML形式的响应数据
demo: html页面代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>原生实现</title> </head> <body> <form autocomplete="off"> 姓名:<input type="text" id="username"> <span id="uSpan"></span> <br> 密码:<input type="password" id="password"> <br> <input type="submit" value="注册"> </form> </body> <script> // 1.为姓名绑定时去焦点事件 document.getElementById("username").onblur = function () { // 2.创建XMLHttpRequesth核心对象 let xmlHttp = new XMLHttpRequest(); // 3.打开指定的连接 let username = document.getElementById("username").value; xmlHttp.open("GET","userServlet?username=" + username,true); // 4.发送请求 xmlHttp.send(); // 5.处理响应 xmlHttp.onreadystatechange = function () { //判断请求和响应是否成功 if(xmlHttp.readyState == 4 && xmlHttp.status == 200){ //将响应的数据显示到span标签 document.getElementById("uSpan").innerHTML = xmlHttp.responseText; } } } </script> </html>servlet内容,此处简单演示,将数据写死了:
package servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/userServlet") public class USerServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); String username = req.getParameter("username"); if("Miller".equalsIgnoreCase(username)){ resp.getWriter().println("<font color='red'>已注册</font>"); }else{ resp.getWriter().println("<font color='green'>可用</font>"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }页面结果: