ajax学习(理解即可)

ajax介绍

局部刷新技术,可以在不重新加载整个页面的情况下,针对局部的内容进行更新。

传统请求:浏览器会将服务器的响应显示的浏览器的页面中
ajax请求:浏览器只负责接受服务器给出的响应,但是浏览器不做任何处理。

ajax请求的应用场景:一个网站的所有请求都可以采用ajax请求。

原生js的ajax请求(理解)

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" value="js_ajax" onclick="js_ajax()"><br>
<span id="mySpan" style="color: red">此处用来显示服务器响应的数据</span>
</body>

<script>

    function js_ajax() {
        //创建ajax引擎对象
        let request = new XMLHttpRequest();

        //绑定onreadystatechange事件,作为响应成功时的回调函数
        /**
         *
         *      readystate:
         *      HTTP 请求的状态.当一个 XMLHttpRequest 初次创建时,
         *      这个属性的值从 0 开始,直到接收到完整的 HTTP 响应,这个值增加到 4。

                 0 Uninitialized 初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。
                 1 Open open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。
                 2 Sent Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。
                 3 Receiving 所有响应头部都已经接收到。响应体开始接收但未完成。
                 4 Loaded HTTP 响应已经完全接收。


                status : http协议响应的状态码
                        200:表示ok
                        404: 表示 找不到资源
                        302:表示重定向的

                responseText : 服务器给出的响应体

         */
        request.onreadystatechange=function () {
            //响应成功的回调函数
            if(request.readyState==4&&request.status==200){
                //获取响应体
                let responseText = request.responseText;
                //dom操作
                document.getElementById("mySpan").innerHTML=responseText;
            }
        }

        //通过open方法设置请求的参数
        /**
         *   method:请求的方式
         *   url:请求的地址
         *   async:是否异步,true表示异步
         *
         */
        request.open("get","demoServlet",true);

        //通过send方法发送请求
        request.send();
    }

</script>
</html>

同步异步

同步:浏览器在还没有接受到服务器给出的响应时,浏览器处于卡死的状态。无法进行其他操作。 (java单线程)
异步:浏览器在还没有接收到服务器的响应时,浏览器的任何其他操作照样执行,不受任何影响。(ajax请求是子线程去发送的。)

企业开发:基本使用异步。

jquery的ajax

注意:需要引入jquery文件

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <input type="button" value="jquery_get" onclick="jquery_get()"><br>
    <input type="button" value="jquery_post" onclick="jquery_post()"><br>
    <input type="button" value="jquery_ajax" onclick="jquery_ajax()"><br>
    <span id="mySpan" style="color: red">此处用来显示服务器响应的数据</span>
</body>
<script src="js/jquery-2.1.0.js"></script>
<script>

    function jquery_get() {
        $.get("demoServlet",{"username":"zhangsan"},function (data) {

            //将响应体设置到myspan中
            document.getElementById("mySpan").innerHTML=data;
        });
    }

    function jquery_post() {
        $.post("demoServlet",{"username":"zhangsan"},function (data) {

            //将响应体设置到myspan中
            document.getElementById("mySpan").innerHTML=data;
        });
    }


    function jquery_ajax() {

        $.ajax({
            url:"demoServlet",
            data:{
                "username":"lisi"
            },
            async:true,
            type:"get",
            success:function (res) {
                //请求成功的回调函数,参数就是响应体
                document.getElementById("mySpan").innerHTML=res;
            }
        });
    }

</script>
</html>
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--
        this指代当前标签对象

    -->
    用户名: <input type="text" value="" name="username" onblur="validateUsername(this.value)">
    <span id="myspan"></span>
</body>
<script src="js/jquery-2.1.0.js"></script>
<script>

    function validateUsername(username) {

        //document.getElementById("").value;

        $.ajax({
            url:"validateUsername",
            data:{
                "username":username
            },
            success:function (res) {
                //console.log(typeof(res)+":"+res);
                //这是请求成功的回调函数,res是响应体

                let myspan = document.getElementById("myspan");
                if(res=="true"){
                    //校验成功
                    //设置标签的文本值
                    myspan.innerHTML="用户名可用";
                    //修改css样式
                    myspan.style.color="green";
                }else if(res=="false"){
                    //校验失败a
                    //设置标签的文本值
                    myspan.innerHTML="用户名已存在";
                    //修改css样式
                    myspan.style.color="red";
                }
            }
        });
    }

</script>
</html>
相关推荐
怀旧6661 小时前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
infiniteWei2 小时前
【Lucene】原理学习路线
学习·搜索引擎·全文检索·lucene
follycat2 小时前
[极客大挑战 2019]PHP 1
开发语言·学习·网络安全·php
并不会6 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
龙鸣丿6 小时前
Linux基础学习笔记
linux·笔记·学习
Nu11PointerException8 小时前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
@小博的博客12 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
南宫生12 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步13 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
love_and_hope13 小时前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习