当前位置: 首页 > news >正文

AJAX(异步的 JavaScript 和 XML)

ajax

异步刷新(局部刷新),可以给后台发请求

四种发请求的方式:

  • 地址栏(可以发get请求)
  • a标签(可以发get请求)
  • form表单(可以发post请求)
  • Location.href或window.open( )(可以发get请求)

异步:整个页面不会全部刷新,只有某个局部在刷新

比如:验证用户名是否存在

刷新:

一、原生JS的ajax

<body>
    <p>
        账号:<input type="text" id="user name"><span id="msg"></span>
    </p>
    <input type="button" onclick="valid()" value="验证">

    <script>
        // 发送get请求
        function valid(){
            let username = document.querySelector("#username").value;
            let msg = document.querySelector("#msg");
            //当失去焦点时,向后台发请求(使用JS原生的ajax)
            let xhr = new XMLHttpRequest();
            //设置请求的方式和url地址
            //第一个参数是get或者post请求,第二个参数是要把请求发到哪
            
            //发送GET请求
            xhr.open("GET","valid.do?username=" + username);
            //发送
            //括号里的参数是请求体
            xhr.send(null);

            //发送POST请求
            xhr.open("POST","valid.do");
            //POST请求需要设置一下请求头信息
            //Content-type:发送的请求的内容的类型
            //application/x-www-form-urlencoded:文档流
            xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
            //发请求
            xhr.send("username="+username + "&password=123456");
            
            //后台给出响应
            //指定xhr状态变化的处理函数
            xhr.onreadystatechange = function (){
                //如果响应码是4,可以正常接收后台的响应
                if(this.readyState === 4){
                    //通过xhr的responseText可以获取到对应的响应体
                    // console.log(this.responseText);
                    switch (this.responseText){
                        case "1":
                            msg.innerHTML = "用户名可用";
                            break;
                        case "0":
                            msg.innerHTML = "用户名已存在";
                    }
                }
            }
        }
    </script>
</body>

注意1:使用ajax发送请求,页面是不可以通过后台跳转页面

如果需要跳页面,也是通过我们前端的JS来跳转,不可以通过serlvet跳转

注意2:ajax和form表单不能同时使用

ajax:不跳页面

form:一定跳走

请求体:post请求才有请求体

ajax发起请求,后台给出的响应会回到ajax的响应处理函数

readyState响应码

0:xhr被创建成功,但是open方法未调用

1:open方法被调用,建立了连接

**2:**send方法被调用,可以获取状态行和响应头

**3:**可以拿到响应体,响应体加载中

**4:**响应体下载完成,可以直接使用responseText。代表请求可以正常发送,响应能够正常接收。

二、JQuery的ajax

json串

json串的格式:键值对

三、Vue的ajax

axios

对原生ajax的一个封装

ES6语法、Promise语法

axios如果发送get请求:

​ 这个请求中如果有参数,那还是一个默认的以文档流的形式发送,和之前的任何一种请求方式没有任何区别。

axios如果发送post请求:

​ 会把post请求的请求体转成json串,然后再发给后台。

发get请求和post请求的场景

get请求:后台没有对应的对象来封装,不能有私密数据。

post请求:后台都是有对象跟着的。

封装对象的前提:

json串中的数据的key和对象的属性名要一致。

set方法的名字要对应上,跟属性名无关。

相关文章:

  • 线性代数学习笔记8-2:对称矩阵和Hermitian矩阵、共轭转置、正定矩阵
  • 谷粒商城 (七) --------- SpringCloud Alibaba 基础配置
  • Springboot 如何在连接池未加载前从AWS,Azure等云上获取数据库密码
  • 猿创征文|在CSDN学习的那些事
  • springboot 缓存一致性常用解决方案
  • ST推出 28nm MCU ,NXP更狠,推出16nm MCU
  • 系统检测工具
  • GCN笔记:Graph Convolution Neural Network,ChebNet
  • [JavaWeb学习] Spring Ioc和DI概念思想
  • Python版中秋佳节月饼抢购脚本
  • C语言经典算法实例2:数组求素数
  • 什么是Java?
  • Vue插值表达式及常用指令
  • 【重学Reids 缓存】之Reids 缓存之RDB 持久化
  • 30分钟吃掉pytorch中的各种归一化层
  • 网络传输文件的问题
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Apache Zeppelin在Apache Trafodion上的可视化
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Date型的使用
  • ES6 ...操作符
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • MobX
  • SpringBoot几种定时任务的实现方式
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 动态魔术使用DBMS_SQL
  • 爬虫模拟登陆 SegmentFault
  • 使用agvtool更改app version/build
  • 学习JavaScript数据结构与算法 — 树
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (3)(3.5) 遥测无线电区域条例
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (三)模仿学习-Action数据的模仿
  • .Net Memory Profiler的使用举例
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NetCore部署微服务(二)
  • .net操作Excel出错解决
  • .net反编译的九款神器
  • .net访问oracle数据库性能问题
  • .NET实现之(自动更新)
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @javax.ws.rs Webservice注解
  • @Pointcut 使用
  • []sim300 GPRS数据收发程序
  • [20170713] 无法访问SQL Server
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [30期] 我的学习方法
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Angularjs]ng-select和ng-options
  • [ASP]青辰网络考试管理系统NES X3.5
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [C#] 基于 yield 语句的迭代器逻辑懒执行