AJAX:

news2025/1/20 0:56:38

目录

AJAX简介:

特点:

优点:

缺点:

http请求报文和响应报文:

AJAX代码实现:

发送get请求:

发送post请求:

​服务器响应json数据:

​AJAX的问题处理:

IE缓存:(ie已凉)

请求超时和网络异常:

 手动取消发送请求:借助abort对象

 重复请求问题:

axios发送ajax请求:

fetch发送ajax请求:

​跨域的解决方案:

JSONP(了解):

CORS:     


AJAX简介:

        AJAX 全称为 Asynchronous JavaScript And XML ,就是 异步的 JS 和 XML 通过 AJAX 可以在浏览器中向服务器发送异步请求 ,最大的优势:无刷新获取数据。 AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。
        注意:XML 可扩展标记语言,被设计用来传输和存储数据。XML 和 HTML 类似,不同的是 HTML 中都是预定义标签,而 XML 中没有预定义标签,全都是自定义标签,用来表示一些数据。 现在已经被json取代。
比如说我有一个学生数据:
 name = "孙悟空" ; age = 18 ; gender = "男" ; 
用 XML 表示: 
<student> 
    <name>孙悟空</name>
    <age>18</age> 
    <gender>男</gender> 
</student>

用 JSON 表示:
{"name":"孙悟空","age":18,"gender":"男"}

特点:

优点:

  1. 可以无需刷新页面而与服务器端进行通信。
  2. 允许你根据用户事件来更新部分页面内容。

缺点:

  1. 没有浏览历史,不能回退
  2. 存在跨域问题(同源)
  3. SEO 不友好

http请求报文和响应报文:

 

 npm初始化的命令: npm init --yes

AJAX代码实现:

发送get请求:

发送post请求:

 服务器响应json数据:

AJAX的问题处理:

IE缓存:(ie已凉)

情景:有时候需要时效性请求数据,避免二次请求的数据是缓存数据(2021ie已凉)

办法:发请求的时候,加上时间戳

xhr.open('GET', 'http://127.0.0.1:8000/ie?t='+date.now());

请求超时和网络异常:

  // 绑定事件
        btn.addEventListener('click', function () {
            const xhr = new XMLHttpRequest();
            //2s请求不到就会自动取消请求
            xhr.timeout = 2000;
            //超时回调
            xhr.ontimeout = function () {
                //有更加友好的用户体验,比如遮罩层
                alert('请求超时,请稍后尝试!')
            };
            //网络异常回调
            xhr.onerror = function () {
                alert('你的网络似乎出现了问题!')
            }
            xhr.open('GET', 'http://127.0.0.1:8000/delay');
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xhr.send();
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if (xhr.status >= 200 && xhr.status < 300) {
                        result.innerHTML = xhr.response;
                    } else {}
                }
            }
        })

 手动取消发送请求:借助abort对象

<body>
    <button>点击发送请求</button>
    <button>取消点击</button>


    <script>
        // 获取button元素
        const btn = document.getElementsByTagName('button');
        const xhr = new XMLHttpRequest();

        // 绑定事件
        btn[0].addEventListener('click', function () {

            xhr.open('GET', 'http://127.0.0.1:8000/delay');
            xhr.send();

        })
        btn[1].addEventListener('click', function () {
            xhr.abort();
        })
    </script>
</body>

 重复请求问题:

  // 获取button元素
        const btn = document.getElementsByTagName('button')[0];
        let xhr = null;

        let isSending = false;
        // 绑定事件
        btn.onclick = function () {
            if (isSending) xhr.abort();
            xhr = new XMLHttpRequest();
            isSending = true;
            // isSending = true;
            xhr.open('GET', 'http://127.0.0.1:8000/delay');
            xhr.send();


            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    isSending = false;

                } else {

                }
            }

        }

axios发送ajax请求:

  <button>get</button>
    <button>post</button>
    <button>ajax</button>

    <script>
        const btns = document.querySelectorAll('button');
        btns[0].onclick = function () {
            axios.get('http://127.0.0.1:8000/axios-server', {
                //url参数
                params: {
                    dog: 'hanghang',
                    rabbit: 'qianqian'
                },
                //请求头信息
                headers: {
                    name: 'zhongguo '
                }
            }).then(value => {
                console.log(value)
            })
        };
        btns[1].onclick = function () {
            axios.post('http://127.0.0.1:8000/axios-server', {
                //请求体
                adress: 'haier'
            }, {
                //url参数
                params: {
                    dog: 'hang',
                    rabbit: 'qian'
                },
                //请求头信息
                headers: {
                    name: 'zhongguo '
                },
            })
        };
        btns[2].onclick = function () {
            axios({
                url: 'http://127.0.0.1:8000/axios-server',
                method: 'POST',
                //url参数
                params: {
                    dog: 'hang'
                },
                //头信息
                headers: {
                    rabbit: 'qian'
                },
                //请求体信息
                data: {
                    passwaord: '123'
                }
            }).then(response => {
                console.log(response)
            })
        }
    </script>

axios通用方法发送请求的返回结果: 

fetch发送ajax请求:

跨域的解决方案:

JSONP(了解):

        JSONP(JSON with Padding),是一个非官方的跨域解决方案,纯粹凭借程序员的聪明
才智开发出来, 只支持 get 请求
JSONP 怎么工作的?
在网页有一些标签天生具有跨域能力,比如: img link iframe script 。 JSONP 就是利用 script 标签的跨域能力来发送请求的。
JSONP 的使用:
//1.动态的创建一个 script 标签
var script = document.createElement("script");
//2.设置 script 的 src,设置回调函数
script.src = "http://localhost:3000/testAJAX?callback=abc";
function abc(data) {
alert(data.name);
};
//3.将 script 添加到 body 中
document.body.appendChild(script);
//4.服务器中路由的处理
router.get("/testAJAX" , function (req , res) {
console.log("收到请求");
var callback = req.query.callback;
var obj = {
name:"孙悟空",
age:18
}
res.send(callback+"("+JSON.stringify(obj)+")");
});

CORS:     

        CORS(Cross-Origin Resource Sharing ),跨域资源共享。 CORS 是官方的跨域解决方
案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持 get 和 post 请求。跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些 源站通过浏览器有权限访问哪些资源
CORS 怎么工作的?
CORS 是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应 以后就会对响应放行。

CORS的使用:
主要是服务器端的设置:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始:如何用Python建立你的第一个人工智能模型

1. 摘要&#xff1a; 在这篇文章中&#xff0c;我们将介绍如何从零开始使用Python建立你的第一个人工智能模型。无论你是刚接触编程的新手&#xff0c;还是有经验的开发者想进一步探索人工智能领域&#xff0c;这篇文章都将为你提供清晰、详细的指南。我们将一步步探索数据预处…

[分布式锁]:Redis与Redisson

文章目录 1 分布式锁1.1 为什么需要分布式锁&#xff1f;1.1.1 引入业务场景1.1..2 本地锁与分布式锁 1.2 分布式锁核心思想1.3 基于Redis实现分布式锁1.3.1 基于Redis实现分布式锁问题1.3.2 问题时间线分析 2 Redisson入门2.1 Redisson快速实现2.2 开门狗机制2.3 加锁的实现原…

Python手写数字识别

神经网络是手写数字识别中常用的机器学习模型。它由许多神经元组成&#xff0c;每个神经元接收输入并生成输出。在前向传递过程中&#xff0c;神经元计算一些权重和偏移量的线性组合&#xff0c;并将其输入到一个非线性的激活函数中&#xff0c;从而生成神经元的输出。输出层通…

6道常见hadoop面试题及答案解析

Q1.什么是Hadoop&#xff1f;   Hadoop是一个开源软件框架&#xff0c;用于存储大量数据&#xff0c;并发处理/查询在具有多个商用硬件&#xff08;即低成本硬件&#xff09;节点的集群上的那些数据。总之&#xff0c;Hadoop包括以下内容&#xff1a;   HDFS&#xff08;Ha…

Scrum经验性过程

软件开发是一个复杂的活动&#xff0c; 在软件产品开发的过程中不仅存在着需求的不确定性&#xff0c;也存在着技术的不确定性&#xff0c;再加上参与软件开发的主体通常是由多人组成的软件开发团队&#xff0c;加上人的因素&#xff0c;就让整个软件开发的活动变得非常复杂。如…

MySQL的索引详解

1.什么是MySQL的索引 1.1索引的概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引&#xff0c; 并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。 所以索引归根结底只是在做一件事&#xff0c;添加了索…

数据结构-Redis(三)

前面介绍了redis的String和哈希&#xff0c;接下来看看其他的数据结构 List LPUSH&#xff1a;左边放入 RPUSH&#xff1a;右边放入 LPOP&#xff1a;取出左边第一个数&#xff0c;并且移除 RPOP&#xff1a;取出右边第一个数&#xff0c;并且移除 由上操作可以看出&#…

chatgpt赋能python:Python中一行输出的方法

Python中一行输出的方法 Python是一种高级编程语言&#xff0c;其语法简洁、易于阅读、丰富的库和解释器使其成为了众多程序员的选择。在Python中有时需要一行输出多个值、变量或者其他信息&#xff0c;因此在本文中将介绍如何在Python中实现一行输出的方法。 一般的输出方法…

chatgpt赋能python:Python如何一行一行运行?

Python 如何一行一行运行&#xff1f; Python是一门广泛应用于开发Web、科学计算、人工智能等领域的高级编程语言。相比其他编程语言&#xff0c;Python简单易学&#xff0c;语法简洁优雅&#xff0c;拥有许多强大的第三方库和工具。但作为一个新手&#xff0c;可能会对Python…

【复习笔记】FreeRTOS(四) 列表项的插入和删除

本文是FreeRTOS复习笔记的第四节&#xff0c;列表项的插入和删除。 上一篇文章&#xff1a; 【复习笔记】FreeRTOS(三)任务挂起和恢复 文章目录 一、列表和列表项1.1. 列表1.2. 列表项1.3. 迷你列表项 二、实验目的三、测试例程四、实验效果 一、列表和列表项 列表和列表项是F…

Dubbo 注册,调用,通信,容错

Dubbo简化模型 3种开发方式 开发方式 举例 特点 XML配置 等 业务代码零侵入 扩展修改方便 注解方式 EnableDubbo DubboService DubboReference 扩展修改方便 修改需要重新编译代码 API编程 DubboBootstrap ServiceConfig ReferenceConfig应用 业务侵入性大 修改复杂…

【前端学习】React学习资料

React 是一种开源的 JavaScript 库&#xff0c;用于构建用户界面。它由 Facebook 开发并维护&#xff0c;已经成为了当今最流行的前端库之一。与其他框架不同&#xff0c;React 主要专注于视图层&#xff08;View&#xff09;&#xff0c;旨在通过声明式、组件化的方式来构建复…

Pagination分页(antd-design组件库)展示所有配置选项和onChange的作用

1.Pagination分页 采用分页的形式分隔长列表&#xff0c;每次只加载一个页面。 2.何时使用 当加载/渲染所有数据将花费很多时间时&#xff1b; 可切换页码浏览数据。 组件代码来自&#xff1a; 分页 Pagination - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-d…

redis到底是怎么样进行渐进式hash的

Redis 是一个开源&#xff08;BSD许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。那么redis的底层是如何来存储数据的呢&#xff1f; 一、redis如何在存储大量的key时候&#xff0c;查询速度还能接近O(1)呢&#xf…

分布式事务方案学习

第100篇文章啦&#xff01;分布式事务在面试中分布式事务也是十分重要的点&#xff0c;所以学习完分布式锁后我们就来学习分布式事务吧。 事务表示的是我们在业务逻辑中对数据库进行操作的一组单元&#xff0c;需要同时成功或同时失败&#xff0c;不了解的小伙伴们可以看一下下…

Linux编译器-gcc/g++(动静态链接)

目录 一、Linux编译器-gcc/g的使用1.1 背景知识1.2 预处理&#xff0c;编译&#xff0c;汇编&#xff0c;链接1.3 动静态链接 二、补充sudo设置 一、Linux编译器-gcc/g的使用 1.1 背景知识 我们为什么能在windows或者linux下进行C/C或者其它形式的开发呢&#xff1f;前提条件…

我在VScode学Java(Java一维数组、二维数组、JVM中的堆和栈)重制版

​ 我的个人博客主页&#xff1a;如果’真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习---->可以参考我的这篇博客&#xff1a;《我在VScode学Java》 Java一维数组、二维数组 零._.在Java中_什么是数组Java 数组是一种数据结构&#xff0c;存储一组相同类型的数据。引…

Docker网络模型(七)使用 IPvlan 网络

使用 IPvlan 网络 IPvlan 驱动为用户提供了全面控制 IPv4 和 IPv6 寻址的能力。 IPvlan 让操作者能完全操控二层&#xff08;数据链路层&#xff09;网络的 vlan 标签&#xff0c;甚至也提供了三层&#xff08;网络传输层&#xff09;路由控制给感兴趣的用户。对于抽象出物理限…

【SpringSecurity】CSRF、环境配置、授权、认证功能、记住我功能实现

SpringSecurity 文章目录 SpringSecurityCSRF跨站请求伪造攻击开发环境搭建认证直接认证使用数据库认证自定义登录界面 授权基于角色的授权基于权限的授权使用注解判断权限 记住我SecurityContext SpringSecurity是一个基于Spring开发的非常强大的权限验证框架&#xff0c;其核…

Java快速安装以及入门指南

安装 Java 环境教程 Java 是一种广泛应用于软件开发、Web 应用程序和移动应用程序等领域的编程语言。如果您要使用 Java 进行开发或运行需要 Java 程序&#xff0c;您需要先在计算机上安装 Java 环境。 本教程将向您介绍如何在 Windows 操作系统上安装和验证 Java 环境。还将…