Ajax

文章目录

Ajax

AJAX,全称是"异步JavaScript和XML"(Asynchronous JavaScript and XML),是一种使用JavaScript和XML(标准通用标记语言的子集)的开发技术。Ajax通过使用JavaScript,HTML,CSS和XMLHttpRequest对象,可以在不刷新整个页面的情况下,创建与服务器的异步交互。

Ajax技术可以发送和检索与服务器的数据,而无需改变现在显示的页面。这使用户可以同时处理其他事情,不会受到数据传输延迟的影响。

Ajax播放的关键角色是XMLHttpRequest对象。这个对象是浏览器的一部分,它允许JavaScript以一种异步的方式向服务器发送或接收数据。这使得Web应用程序能够以不影响或中断用户操作的方式处理数据。

快速入门

使用js发送ajax请求:

html 复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Ajax demo</title>
    </head>
    <body>
        <form action="/yyy" method="post">
            用户名字:<input id="uname" name="username" type="text">
            <input onclick="checkUser();" type="button" value="验证用户名">
            <input id="myres" style="border-width: 0;color: red" type="text"><br/><br/>
            用户密码:<input name="password" type="password"><br/><br/>
            电子邮件:<input name="email" type="text"><br/><br/>
            <input type="submit" value="用户注册">
        </form>
        <h1>返回的 json 数据</h1>
        <div id="div1"></div>
        <script>
            checkUser = function () {
                // 新建一个 XMLHttpRequest 对象,该对象用于与服务器交换数据
                var xhr = new XMLHttpRequest();

                // 获得 id 为 "uname" 的 HTML 元素(可能是输入框)的值
                var uname = document.getElementById("uname").value;

                // 初始化一个请求。"GET" 是HTTP方法,"/yyy?username=" + uname是URL
                // "true" 表示异步(不等待服务器的响应,即发送请求后继续执行其他代码)。
                xhr.open("GET", "/yyy?username=" + uname, true);

                // 发送请求。因为这是一个GET请求,所以这里没有发送任何数据(send参数为空)。
                xhr.send();
            }
        </script>
    </body>
</html>

onreadystatechange属性

readyState 属性存留 XMLHttpRequest 的状态。

onreadystatechange 属性定义当 readyState 发生变化时执行的函数。

html 复制代码
<script>
    checkUser = function () {
        var xhr = new XMLHttpRequest();
        var uname = document.getElementById("uname").value;
        xhr.open("GET", "/yyy?username=" + uname, true);
        
        // 当xhr对象readState改变时触发
        xhr.onreadystatechange = function (){
            console.log(xhr)
		}
        
        xhr.send();
    }
</script>

JQuery 的 Ajax 请求

$.ajax 方法

参数:

  • url: 请求的地址
  • type : 请求的方式 get 或 post
  • data : 发送到服务器的数据。将自动转换为请求字符串格式
  • success: 成功的回调函数
  • error: 失败后的回调函数
  • dataType: 返回的数据类型 常用 json 或 text
html 复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Ajax demo</title>
        <script src="jquery-3.7.1.js"></script>
    </head>
    <body>
        <form action="/yyy" method="post">
            用户名字:<input id="uname" name="username" type="text">
            <input onclick="checkUser();" type="button" value="验证用户名">
            <input id="myres" style="border-width: 0;color: red" type="text"><br/><br/>
            用户密码:<input name="password" type="password"><br/><br/>
            电子邮件:<input name="email" type="text"><br/><br/>
            <input type="submit" value="用户注册">
        </form>
        <h1>返回的 json 数据</h1>
        <div id="div1"></div>
        <script>
            checkUser = function () {
                var $uname = $("#uname").val()
                $.ajax({
                    url: "/yyy?" + $uname,
                    type: "get",
                    success: function (data) {
                        console.log(data)
                    }
                })
            }
        </script>
    </body>
</html>

.get 请求和.post 请求

.get 和 .post 底层还是使用$.ajax()方法来实现异步请求

参数:

  • url: 请求的 URL 地址
  • data: 请求发送到服务器的数据
  • success: 成功时回调函数
  • type: 返回内容格式,xml, html, script, json, text
html 复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Ajax demo</title>
        <script src="jquery-3.7.1.js"></script>
    </head>
    <body>
        <form action="/yyy" method="post">
            用户名字:<input id="uname" name="username" type="text">
            <input onclick="checkUser();" type="button" value="验证用户名">
            <input id="myres" style="border-width: 0;color: red" type="text"><br/><br/>
            用户密码:<input name="password" type="password"><br/><br/>
            电子邮件:<input name="email" type="text"><br/><br/>
            <input type="submit" value="用户注册">
        </form>
        <h1>返回的 json 数据</h1>
        <div id="div1"></div>
        <script>
            checkUser = function () {
                var $uname = $("#uname").val()
                $.get({
                    url: "/yyy?" + $uname,
                    success: function (data) {
                        console.log(data)
                    }
                })
            }
        </script>
    </body>
</html>

$.getJSON

.getJSON 底层使用.ajax()方法来实现异步请求

参数:

  • url: 请求发送的哪个 URL
  • data: 请求发送到服务器的数据
  • success: 请求成功时运行的函数
html 复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Ajax demo</title>
        <script src="jquery-3.7.1.js"></script>
    </head>
    <body>
        <form action="/yyy" method="post">
            用户名字:<input id="uname" name="username" type="text">
            <input onclick="checkUser();" type="button" value="验证用户名">
            <input id="myres" style="border-width: 0;color: red" type="text"><br/><br/>
            用户密码:<input name="password" type="password"><br/><br/>
            电子邮件:<input name="email" type="text"><br/><br/>
            <input type="submit" value="用户注册">
        </form>
        <h1>返回的 json 数据</h1>
        <div id="div1"></div>
        <script>
            checkUser = function () {
                var $uname = $("#uname").val()
                $.getJSON({
                    url: "/yyy",
                    data: {"username": $uname},
                    success: function (data) {
                        console.log(data)
                    }
                })
            }
        </script>
    </body>
</html>
相关推荐
linux_cfan2 小时前
17 · 引擎适配器全景:HLS/DASH/Vimeo/Mux/Cast
前端·javascript·音视频
计算机魔术师3 小时前
烧掉2780亿美元还不够?OpenAI的资本豪赌让人头皮发麻
前端
IT_陈寒4 小时前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
卡布鲁4 小时前
React useMemo 与 useCallback 完全指南:原理、场景与避坑
前端·react.js
碳基修炼4 小时前
排查记:本地 devServer 是 http,浏览器却把 302 重定向升级成了 https
前端·http
步行cgn4 小时前
Spring p 命名空间注入详解
java·前端·spring
何何____4 小时前
Vue 生命周期详解
前端·javascript
江米小枣tonylua5 小时前
TypeScript 全面の拥抱 !Prisma 8 + Electron 升级实战
前端
闪耀之光M785 小时前
npm命令解析
前端
咸鱼老弟5 小时前
AI Agent 的"自主性悖论"——为什么给它的自由度越大,越要配一套更硬的护栏
前端·人工智能