Ajax原理是什么,怎么实现?

Ajax是在不需要重新加载整个网页的情况下,与服务器交换数据并且更新部分网页的技术。

Ajax的原理就是通过XMLHttpRequest对象来向服务器发起异步请求,从服务器获取数据,然后用JavaScript来操作DOM实现更新页面。

实现Ajax异步交互,前端需要完成这个步骤:

  • 创建Ajax的核心对象XMLHttpRequest对象
  • 通过XMLHttpRequest对象的open方法与服务器建立连接
  • 构建请求所需的数据内容,并且通过XMLHttpRequest对象的send函数发送数据给服务器
  • 通过XMLHttpRequest对象提供的onreadystatechange事件监听服务器的通信状态
  • 接受并且处理服务器返回的数据结果
  • 将处理结果更新到页面上

创建XMLHttpRequest对象

通过XMLHttpRequest构造函数初始化一个XMLHttpRequest实例对象:

const xml = new XMLHttpRequest();

和服务器连接

通过XMLHttpRequest对象的open方法,与服务器建立连接:

xhr.open(method,url,async,user,password)

method:请求方法
url:服务器地址
async:布尔值,表示是否异步执行,默认是true
user:可选的用户用于认证用途,默认null
password:可选的密码用于认证用途,默认为null

给服务器发送数据

通过XMLHttpRequest对象的send方法,把客户端页面的数据发送给服务器:

xhr.send([body])

body:在请求中要发送的数据体,如果不传递则为null。

如果使用GET请求方式发送数据的时候,需要注意:

  • 将请求的数据添加到open()中的url部分,
  • 发送的数据的send()方法中的参数设置为null

绑定onreadystatechange事件

onreadystatechange事件用于监听服务器的通信状态,主要监听的属性为XMLHttpRequest.readyState。

XMLHttpRequest.readyState有几个状态:

  1. UNSENT,未打开
  2. OPENED,未发送
  3. HEADER_RECEIVED,获取响应头
  4. LOADING,正在下载响应体
  5. DONE请求完成

只要readyState发生改变,就会触发onreadystatechange事件,XMLHttpRequest.responseText属性用于接收服务器的响应结果。

const request = new XMLHttpRequest()
request.onreadystatechange = function (e) {if (request.readyState === 4) { // if (request.status >= 200 && request.status <= 300) {console.log(request.responseText) // } else if (request.status >= 400) {console.log(" " + request.status)}}
}
request.open('POST', 'http://xxxx')
request.send()

封装一个Ajax函数

function ajax(options) {// XMLHttpRequestconst xhr = new XMLHttpRequest()//options = options || {}options.type = (options.type || 'GET').toUpperCase()options.dataType = options.dataType || 'json'const params = options.data//if (options.type === 'GET') {xhr.open('GET', options.url + '?' + params, true)xhr.send(null)} else if (options.type === 'POST') {xhr.open('POST', options.url, true)xhr.send(params)//xhr.onreadystatechange = function () {if (xhr.readyState === 4) {let status = xhr.statusif (status >= 200 && status < 300) {options.success && options.success(xhr.responseText, xhr.responseXML)} else {options.fail && options.fail(status)}}}}
}

使用:

ajax({type: 'post',dataType: 'json',data: {},url: 'https://xxxx',success: function (text, xml) {//console.log(text)},fail: function (status) {console.log(status)}
})

这就是Ajax的流程。

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

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

相关文章

wangEditor富文本编辑器与layui图片上传

记录&#xff1a;js 显示默认的wangEditor富文本编辑器内容和图片 <style>body {background-color: #ffffff;}.layui-form-select dl{z-index:100000;} </style> <div class"layui-form layuimini-form"><div class"layui-form-item"…

ubuntu系统在有无NVIDIA驱动下查看显卡型号

在ubuntu系统下&#xff0c;分别在有nvidia显卡驱动和无nvidia显卡驱动时&#xff0c;查看nvidia显卡型号。 1、有nvidia显卡驱动时的查看方式 nvidia-smi -L会显示如下信息&#xff1a; GPU 0: NVIDIA GEForce GTX 1660 SUPER (UUID: GPU-*****)2、无nvidia显卡驱动时的查看…

【Linux】从零开始认识动静态库 -动态库

送给大家一句话&#xff1a; 我不要你风生虎啸&#xff0c; 我愿你老来无事饱加餐。 – 梁实秋 《我把活着欢喜过了》 ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭…

架构每日一学 4:成为首席架构师,你必须学会顺应人性

本文首发于公众平台&#xff1a;腐烂的橘子 架构师生存法则之二&#xff1a;架构活动需要顺应人性 程序员入行的第一天起就进入了一个机器的世界。在别人的眼中&#xff0c;程序员平时很少说话&#xff0c;更多的时间在和电脑打交道。 程序员工作时间久了大脑会被格式化&…

Java医院绩效考核系统源码B/S+avue+MySQL助力医院实现精细化管理 医院综合绩效核算系统源码

Java医院绩效考核系统源码B/SavueMySQL助力医院实现精细化管理 医院综合绩效核算系统源码 医院绩效考核系统目标是实现对科室、病区财务指标、客户指标、流程指标、成长指标的全面考核、分析&#xff0c;并与奖金分配、学科建设水平评价挂钩。 具体功能模块包括收入核算、成本…

Python中tkinter编程入门3

在使用tkinter创建了窗口之后&#xff0c;可以将一些控件“放置”到窗口中。这些控件包括标签、按键以及输入框等。 1 在窗口中“放置”标签 在窗口中“放置”标签主要有两个步骤&#xff0c;一是创建标签控件&#xff0c;二是将创建好的标签“放置”到窗口上。 1.1 创建标签…

P8803 [蓝桥杯 2022 国 B] 费用报销

P8803 [蓝桥杯 2022 国 B] 费用报销 分析 最值问题——DP 题意分析&#xff1a;从N张票据中选&#xff0c;且总价值不超过M的票据的最大价值&#xff08;背包问题&#xff09; K天限制 一、处理K天限制&#xff1a; 1.对于输入的是月 日的格式&#xff0c;很常用的方式是…

AI算法工程师课程学习-数学基础-高数1-微积分

机器学习数学基础学习路线&#xff1a;1.高中数学-->大学2.微积分-->3.线性代数-->4.概率论-->5.优化理论。 为尽快进入到AI算法课程的学习&#xff0c;现在高数的学习要求&#xff1a; 1.看得懂&#xff0c;知道是什么&#xff0c;能听得懂&#xff0c;能理解讲…

RabbitMQ(安装配置以及与SpringBoot整合)

文章目录 1.基本介绍2.Linux下安装配置RabbitMQ1.安装erlang环境1.将文件上传到/opt目录下2.进入/opt目录下&#xff0c;然后安装 2.安装RabbitMQ1.进入/opt目录&#xff0c;安装所需依赖2.安装MQ 3.基本配置1.启动MQ2.查看MQ状态3.安装web管理插件4.安装web管理插件超时的解决…

构建C语言静态库文件并调用的实战案例和详细步骤实现

准备源文件 calc.h 定义加法&#xff1a;int add(int a, int b);定义减法&#xff1a;int sub(int a, int b); #ifndef __CALC_H_ #define __CALC_H_int add(int a, int b); int sub(int a, int b);#endif // __CALC_H_calc.c 简单的实现加法简单的实现减法 #include &quo…

【VTKExamples::Rendering】第五期 环形阵列Rotations

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例环形阵列Rotations,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Rotations

C语言例题35、反向输出字符串(指针方式),例如:输入abcde,输出edcba

#include <stdio.h>void reverse(char *p) {int len 0;while (*p ! \0) { //取得字符串长度p;len;}while (len > 0) { //反向打印到终端printf("%c", *--p);len--;} }int main() {char s[255];printf("请输入一个字符串&#xff1a;");gets(s)…

基恩士PLC-KV5500基础入门

一、准备工作&#xff1a; 1.准备的东西&#xff1a;一个基恩士PLC-KV5500模块。两个自复位开关&#xff0c;24v LED灯一个&#xff0c;24v开关电源一个&#xff0c;KV5500端子台IO线缆&#xff1b;有编程软件的电脑一台。 编程软件&#xff1a; 基恩士PLC-KV5500接线图&…

【MySQ】9.构建高可用数据库:MySQL集群模式部署大全

单个MySQL节点的主要风险在于它构成了一个单点故障&#xff0c;这意味着任何硬件故障、软件崩溃或维护需求都可能导致整个数据库服务中断&#xff0c;从而影响到业务的连续性和数据的安全性。此外&#xff0c;它还限制了系统的扩展性&#xff0c;使得性能提升和负载均衡变得困难…

C++的数据结构(一)

在计算机科学领域&#xff0c;数据结构扮演着至关重要的角色。它们为有效地存储、检索和操作数据提供了基础框架。C作为一种高效且功能强大的编程语言&#xff0c;为数据结构的实现和应用提供了丰富的工具。本文将探讨C数据结构的重要性&#xff0c;并通过示例展示其在数据结构…

LeetCode-258. 各位相加【数学 数论 模拟】

LeetCode-258. 各位相加【数学 数论 模拟】 题目描述&#xff1a;解题思路一&#xff1a;循环解题思路二&#xff1a;进阶 O(1)解题思路三&#xff1a; 题目描述&#xff1a; 给定一个非负整数 num&#xff0c;反复将各个位上的数字相加&#xff0c;直到结果为一位数。返回这个…

力扣/leetcode383.比特位记数

题目描述 给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 代码思路 第一种方法 最简单的方法就是&#xff0c;遍历然后使用python自带的bin()方法直接…

视频合并有妙招:视频剪辑一键操作,批量嵌套合并的必学技巧

在数字时代的今天&#xff0c;视频已经成为我们日常生活和工作中不可或缺的一部分。无论是记录生活点滴&#xff0c;还是制作专业项目&#xff0c;视频合并都是一个常见的需求。然而&#xff0c;对于许多人来说&#xff0c;视频合并却是一个复杂且繁琐的过程。现在有云炫AI智剪…

域基础-NTLM协议

简介 NTLM(New Technology LAN Manager)协议是微软用于Windows身份验证的主要协议之一。继SMB、LM协议之后微软提出了NTLM协议&#xff0c;这一协议安全性更高&#xff0c;不仅可以用于工作组中的机器身份验证&#xff0c;又可以用于域环境身份验证&#xff0c;还可以为SMB、H…

Tarjan----寻找最近公共祖先(LCA) 板子

一、Tarjan算法作用&#xff1a; Tarjan算法是一种用于寻找图中节点的最近公共祖先&#xff08;LCA&#xff09;的算法。该算法通过深度优先搜索&#xff08;DFS&#xff09;遍历图&#xff0c;并使用并查集&#xff08;Union-Find&#xff09;数据结构来快速找到两个节点的最近…