Ajax阶段学习(二)

92 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第十一天,点击查看活动详情

XMLHttpRequest对象

  • XMLHttpRequest对象是AJAX的核心对象,发送请求以及接收服务器数据的返回,全靠它了。

  • XMLHttpRequest对象,现代浏览器都是支持的,都内置了该对象。直接用即可。

  • 创建XMLHttpRequest对象

    • var xhr = new XMLHttpRequest();
      
  • XMLHttpRequest对象的方法

方法描述
abort()取消当前请求
getAllResponseHeaders()返回头部信息
getResponseHeader()返回特定的头部信息
open(method, url, async, user, psw)规定请求method:请求类型 GET 或 POSTurl:文件位置async:true(异步)或 false(同步)user:可选的用户名称psw:可选的密码
send()将请求发送到服务器,用于 GET 请求
send(string)将请求发送到服务器,用于 POST 请求
setRequestHeader()向要发送的报头添加标签/值对
  • XMLHttpRequest对象的属性
属性描述
onreadystatechange定义当 readyState 属性发生变化时被调用的函数
readyState保存 XMLHttpRequest 的状态。0:请求未初始化 1:服务器连接已建立 2:请求已收到 3:正在处理请求 4:请求已完成且响应已就绪
responseText以字符串返回响应数据
responseXML以 XML 数据返回响应数据
status返回请求的状态号200: "OK"403: "Forbidden"404: "Not Found"
statusText返回状态文本(比如 "OK" 或 "Not Found")

AJAX GET请求

  • 发送AJAX get请求,前端代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>发送ajax get请求</title>
    </head>
    <body>
    <script type="text/javascript">
        window.onload = function () {
            document.getElementById("btn").onclick = function () {
                //1. 创建AJAX核心对象
                var xhr = new XMLHttpRequest();
                //2. 注册回调函数
                xhr.onreadystatechange = function(){
                    if (this.readyState == 4) {
                        if (this.status == 200) {
                            // 通过XMLHttpRequest对象的responseText属性可以获取到服务器响应回来的内容。
                            // 并且不管服务器响应回来的是什么,都以普通文本的形势获取。(服务器可能响应回来:普通文本、XML、JSON、HTML...)
                            // innerHTML属性是javascript中的语法,和ajax的XMLHttpRequest对象无关。
                            // innerHTML可以设置元素内部的HTML代码。(innerHTML可以将后面的内容当做一段HTML代码解释并执行)
                            //document.getElementById("myspan").innerHTML = this.responseText
                            document.getElementById("mydiv").innerHTML = this.responseText
                            // innerText也不是AJAX中的,是javascript中的元素属性,和XMLHttpRequest无关。
                            // innerText也是设置元素中的内容,但是即使后面是一段HTML代码,也是将其看做一个普通字符串设置进去。
                            //document.getElementById("myspan").innerText = this.responseText
                        }else{
                            alert(this.status)
                        }
                    }
                }
                //3. 开启通道
                xhr.open("GET", "/ajax/ajaxrequest2", true)
                //4. 发送请求
                xhr.send()
            }
        }
    </script>
    <button id="btn">发送ajax get请求</button>
    <span id="myspan"></span>
    <div id="mydiv"></div>
    </body>
    </html>
    
  • 发送AJAX get请求,后端代码:

    package com.bjpowernode.ajax.servlet;
    ​
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    ​
    import java.io.IOException;
    import java.io.PrintWriter;
    ​
    /**
     * @program: 代码
     * @ClassName: AjaxRequest2Servlet
     * @version: 1.0
     * @description:
     * @author: bjpowernode
     * @create: 2022-05-13 10:46
     **/@WebServlet("/ajaxrequest2")
    public class AjaxRequest2Servlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 设置响应的内容类型以及字符集
            response.setContentType("text/html;charset=UTF-8");
            // 获取响应流
            PrintWriter out = response.getWriter();
            // 响应
            out.print("<font color='red'>用户名已存在!!!</font>");
        }
    }
    ​
    
  • AJAX get请求如何提交数据呢?

    • get请求提交数据是在“请求行”上提交,格式是:url?name=value&name=value&name=value....
    • 其实这个get请求提交数据的格式是HTTP协议中规定的,遵循协议即可。