AJAX概念:AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML
AJAX作用:
与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据
使用了AJAX和服务器进行通信,就可以使用 HTML+AJAX来替换JSP页面了
异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用校验,等等…
AJAX 快速入门
相关代码可以在W3SCHOOL的AJAX页面直接复制
向服务器发送请求的时候 url要写访问的绝对路径,因为前后端分离,服务器不一样
4表示请求完成并且响应已就绪
200表示“ok”
顺序: 在html页面script里写上 输入框失去焦点事件onblur
用get方式传递请求
<script> //给用户名输入框绑定焦点失去事件 document.getElementById("username").οnblur=function (){ //获取用户名的值 const username = this.value; //创建核心对象 var xhttp; if (window.XMLHttpRequest){ xhttp=new XMLHttpRequest(); }else { xhttp=new ActiveXObject("Microsoft.XMLHTTP") } //发送请求 xhttp.open("GET","http://localhost:8080/maven3/selectUserServlet?username="+username); xhttp.send(); //获取响应 xhttp.onreadystatechange=function (){ if(this.readyState == 4 && this.status==200){ //判断传入的响应 true则为用户名已存在 if(this.responseText=="true"){ document.getElementById("username_err").style.display=''; }else { document.getElementById("username_err").style.display='none'; } } } } </script>
AXIOS
Axios 对原生的AJAX进行封装,简化书写
官网:https://www.axios-http.cn
JSON
转成对象后,就可以用jsObject.name等调用JSON里的数据了
在Axios中,我们无需提前进行转换,因为会自动帮我们转换
sevlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.调用service查询 List<Brand> brands = brandService.selectAll(); //2.将集合转换为JSON数据 序列化 String jsonString = JSON.toJSONString(brands); //3.响应数据 response.setContentType("text/json;charset=utf-8"); response.getWriter().write(jsonString); }
html 主要代码
<script> //当页面加载完成后,发送ajax请求 window.οnlοad=function (){ axios({ method:"get", url:"http://localhost:8080/brand-demo/selectAllServlet" }).then(function (resp){ //获取数据 let brands = resp.data; let tableData =" <tr>\n" + " <th>序号</th>\n" + " <th>品牌名称</th>\n" + " <th>企业名称</th>\n" + " <th>排序</th>\n" + " <th>品牌介绍</th>\n" + " <th>状态</th>\n" + " <th>操作</th>\n" + " </tr>" for (let i = 0; i < brands.length; i++) { let brand = brands[i]; tableData+=" <tr align=\"center\">\n" + " <td>"+(i+1)+"</td>\n" + " <td>"+brand.brandName+"</td>\n" + " <td>"+brand.companyName+"</td>\n" + " <td>"+brand.ordered+"</td>\n" + " <td>"+brand.description+"</td>\n" + " <td>"+brand.status+"</td>\n" + "\n" + " <td><a href=\"#\">修改</a> <a href=\"#\">删除</a></td>\n" + " </tr>" } //设置表格数据 document.getElementById("brandTable").innerHTML=tableData; }) } </script>
request.getParameter 无法读取JSON数据
所以我们直接获取请求体
servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取请求体数据 BufferedReader br = request.getReader(); String params =br.readLine(); //将JSON字符串转换成java对象 Brand brand = JSON.parseObject(params,Brand.class); //调用service添加 brandService.add(brand); //响应成功标识 response.getWriter().write("success"); }
js:
<script> document.getElementById("btn").οnclick=function (){ //将表单数据转为JSON const formData = { brandName: "", companyName: "", ordered: "", description: "", status: "", }; //获取表单数据并设置数据 formData.brandName=document.getElementById("brandName").value; formData.companyName=document.getElementById("companyName").value; formData.ordered=document.getElementById("ordered").value; formData.description=document.getElementById("description").value; //我们不知道哪个选中了,就获取所有的radio,然后遍历,哪个是checked的就赋值哪个 const status = document.getElementsByName("status"); for (let i = 0; i < status.length; i++) { if(status[i].checked){ formData.status=status[i].value; } } //发送ajax请求 axios({ method:"post", url:"http://localhost:8080/brand-demo/addServlet", data:formData }).then(function (resp){ //判断响应数据是否为success if (resp.data==="success"){ location.href="http://localhost:8080/brand-demo/brand.html"; } }) } </script>