Ajax——Ajax基础概念以及两种请求方式

发布于:2023-01-23 ⋅ 阅读:(147) ⋅ 点赞:(0)

1. 传统请求方式

1.1 传统请求的方式

  • 直接在浏览器地址栏上输入URL。
  • 点击超链接
  • 提交form表单
  • 使用JS代码发送请求

1.2 传统请求存在的问题

  • 页面全部刷新导致了用户的体验较差。
  • 传统的请求导致用户的体验有空白期。(用户的体验是不连贯的)

2. Ajax

2.1 Ajax基础知识

AJAX不能称为一种技术,它是多种技术的综合产物。

  • AJAX可以让浏览器发送一种特殊的请求,这种请求可以是:异步的
  • 什么是异步,什么是同步?
    • 假设有t1和t2线程,t1和t2线程并发,就是异步。
    • 假设有t1和t2线程,t2在执行的时候,必须等待t1线程执行到某个位置之后t2才能执行,那么t2在等t1,显然他们是排队的,排队的就是同步。
    • AJAX是可以发送异步请求的。也就是说,在同一个浏览器页面当中,可以发送多个ajax请求,这些ajax请求之间不需要等待,是并发的。
  • AJAX代码属于WEB前端的JS代码。和后端的java没有关系,后端也可以是php语言,也可以是C语言。
  • AJAX 应用程序可能使用 XML 来传输数据,但将数据作为纯文本或 JSON 文本传输也同样常见。
  • AJAX可以更新网页的部分,而不需要重新加载整个页面。(页面局部刷新)
  • AJAX可以做到在同一个网页中同时启动多个请求,类似于在同一个网页中启动“多线程”,一个“线程”一个“请求”。

2.2 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”)

2.3 AJAX GET请求分析

AJAX GET请求建立步骤:

  • 创建XMLHttpRequest的核心对象

  • 注册回调函数

    • 判断xhr对象的状态码是否发生变化
    • 判断xhr状态码值是否为4 并且判断Http状态码是否为200
    • 接受服务器响应的数据信息
  • 打开通道

  • 获取需要的数据

  • 发送数据

建立AJAX GET请求的样例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax2回顾</title>
</head>
<body>
    <script type="text/javascript">
        window.onload = function () {
            var mybtn = document.getElementById("mybtn");
            mybtn.onclick = function () {
                //1.创建XMLHttpRequest对象
                var xhr = new XMLHttpRequest();
                //2.执行回调函数(接受服务器响应过来的数据)
                xhr.onreadystatechange = function () {
                    //如果ajax请求码是4表示服务器开始响应数据
                    if (this.readyState == 4) {

                        if (this.status == 200) {
                            //http状态码也正常
                            //XMLHttpRequest对象获取响应的数据放到span标签
                            document.getElementById("mydiv").innerHTML = this.responseText
                        }
                    }
                }
                //3.开启通道
                //首先需要获取到前端用户填入的数据
                //遇到低版本的浏览器发送get请求时,会走缓存,解决办法是:加一个时间戳
                // alert(new Date().getTime())
                var usercode = document.getElementById("usercode").value;
                var username = document.getElementById("username").value;
                xhr.open("GET","/ajax/ajaxrequest2?t="+new Date().getTime()+"&usercode="+usercode+"&username="+username,true);
                //4.发送数据
                xhr.send();
            }
        }
    </script>

    usercode<input type="text" id="usercode"><br>
    username<input type="text" id="username"><br>

    <button id="mybtn">ajax study</button>

    <br>

    <div id="mydiv"></div>
</body>
</html>

2.4 AJAX POST请求

  • 创建XMLHttpRequest的核心对象

  • 注册回调函数

    • 判断xhr对象的状态码是否发生变化
    • 判断xhr状态码值是否为4 并且判断Http状态码是否为200
    • 接受服务器响应的数据信息
  • 打开通道(不在这里写传送的数据)

  • 设置xhr的请求头

  • 获取需要的数据

  • 发送数据 (在这里填写数据)

建立AJAX POST请求的样例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AJAX POST请求</title>
</head>
<body>

    <script type="text/javascript">
        window.onload = function () {
            document.getElementById("mybtn").onclick = function (){
                //1.创建XMLHttpRequest核心对象
                var xhr = new XMLHttpRequest();
                //2.获取响应数据(this代表的就是xhr)
                xhr.onreadystatechange = function () {
                    if (this.readyState == 4) {
                        if (this.status == 200) {

                            document.getElementById("mydiv").innerHTML = this.responseText;

                        }else{
                            alert(this.status);
                        }
                    }
                }
                //3.打开通道
                xhr.open("POST","/ajax/ajaxrequest3",true);

                //模拟form表单提交数据
                xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                //4.发送请求
                var username = document.getElementById("username").value;
                var password = document.getElementById("password").value;
                xhr.send("username="+username+"&password="+password);//拼串发送数据
            }
        }
    </script>

    <!--使用Post方式提交表单数据-->
    用户名:<input type="text" id="username"><br>
    密码:<input type="password" id="password"><br>
    <button id="mybtn">发送Ajax POST请求</button><br>
    <div id="mydiv"></div>
<!--<form enctype="application/x-www-form-urlencoded"></form>-->
</body>
</html>
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到