原生JavaScript实现AJAX

it2023-05-05  77

同步与异步交互
同步交互:就是客户端向服务器端发送请求,到服务器端进行响应,这个过程中用户不能做其他事情,只能等待相应完才能继续其他请求。执行速度相对较慢,影响整个HTML页面异步请求:客户端向服务器端发送请求,到服务器进行响应的这个过程中,用户可以做其他事情。执行速度相对较快,响应的是部分数据

AJAX(Asynchronous JavaScript And XML) JavaScript和XML的异步

本身不是一种新技术,而是多个技术综合,用于快速创建动态网页的技术一般的网页如果需要更新内容,必需要重新加载整个页面而AJAX是通过AJAX通过浏览与服务器进行少量数据交换,就可以使网页实现异步更新

原生JavaScript实现AJAX

核心对象: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); } }

页面结果:

最新回复(0)