Ajax的概念及jQuery中的Ajax的3种方法,模仿jQuery封装自己的Ajax函数

news/2024/4/28 4:51:13/文章来源:https://blog.csdn.net/Vest_er/article/details/127393463

目录

  • 一、网页中如何请求数据
    • 资源的请求方式
  • 二、Ajax
    • 1、什么是Ajax
    • 2、Ajax的特点
    • 3、Ajax工作原理
    • 4、同步与异步的区别
  • 三、jQuery中的Ajax
    • 1、$.get()函数
    • 2、$.post()函数
    • 3、$.ajax()函数
  • 四、模仿jQuery封装自己的Ajax函数
    • 实现效果
    • 1、定义options参数选项
    • 2、定义resoveData()函数处理data参数
    • 3、定义myAjax()函数
    • 4、判断请求类型
  • 五、使用封装的Ajax函数发送请求

一、网页中如何请求数据

我们从浏览器看到的视频、音乐都属于资源;当然数据也是服务器对外提供的一种资源,只要是数据,都要经过请求 — 处理 — 响应的方式进行获取。

网页中请求服务端的数据需要用到XMLHttpRequest对象,简称xhr,是浏览器提供的JS成员
在这里插入图片描述

资源的请求方式

请求方式说明举例
get获取服务器的资源从腾讯上看综艺
post向服务器提交资源登录微信账号

二、Ajax

1、什么是Ajax

概念:Ajax(全称:Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术,在网页中利用XMLHttpRequest对象和服务器进行数据交互的方式
注意:Ajax不是一种技术规范,只是多种技术的组合。每种技术都有其独特这处,合并在一起形成了一个功能强大的新技术。

2、Ajax的特点

特点:局部刷新,异步加载
通过与后端服务器进行少量的数据交换,Ajax可以使页面实现异步更新。这也意味着可以在不重新加载整个页面的情况下,对页面某个部分进行局部更新。

3、Ajax工作原理

客户端发送请求,请求交给xhr,xhr把请求提交给服务器,服务器进行业务处理,服务器响应数据交给xhr对象,xhr对象接收数据,由javascript把数据写到页面上
在这里插入图片描述

4、同步与异步的区别

同步提交:当用户发送请求时,当前页面不能使用,服务器响应页面到客户端,响应完成之后用户采用使用页面。

异步提交:当用户发送请求时,当前页面可以使用,当异步请求的数据响应给页面,页面把数据显示出来。

三、jQuery中的Ajax

浏览器提供的xhr使用方法比较复杂,jQurey对其进行二次封装,降低使用难度(xhr详解:https://blog.csdn.net/Vest_er/article/details/127397828)
jQuery中发起Ajax请求的方法

1、$.get()函数

向服务器请求数据
语法:

$.get(url, [data], [callback])
参数名参数类型必选?说明
urlsting要请求的资源地址
dataobject请求资源要携带的参数
callbackfunction请求成功的回调函数

2、$.post()函数

向服务器提交数据
语法(参数同$.get()函数)

$.post(url, [data], [callback])

3、$.ajax()函数

综合,可以请求也可以提交数据

语法

$.ajax({tyep:'', // 请求的方式 eg:get或posturl:'',	// 请求的url地址data:{}, // 这次请求要携带的数据sunccess:function(res){} // 请求成功之后的回调
})

四、模仿jQuery封装自己的Ajax函数

实现效果

<!-- 导入自定义的ajax函数库 -->
<script src="./MyAjax.js"></script>
<script>myAjax({methods:'请求类型',url:'请求地址',data:{请求参数对象},success:function(res){ // 成功的回调函数console.log(res); //打印数据}})
</script>

1、定义options参数选项

myAjax()函数是我们自己定义的Ajax函数,它接收一个配置对象作为参数,配置对象中可以配置如下属性

属性名功能
method请求类型
url请求的URL地址
data请求携带的参数
success请求成功之后的回调函数

2、定义resoveData()函数处理data参数

需要把data参数对象转化成查询字符串的格式,从而提交到服务器,因此需要提前定义resoveData函数

// 处理data参数
// @params{data}需要发送到服务器的参数
// @returns{string} 返回拼接好的查询字符串 name=zs&age=18function resoveData(data){var arr = [];for(var k in data){arr.push(k + '=' + data[k]);};return arr.join('&');
}

3、定义myAjax()函数

在myAjax()函数中,需要创建xhr对象,并监听onreadyStatechange事件

function myAjax(options){var xhr = new XMLHttpRequest();// 拼接查询字符串var qs = resoveData(options.data);// 监听请求状态改变的事件xhr.onreadystatechange = function (){if(xhr.readyState == 4 && xhr.status == 200) {// JSON字符串转化为JS对象var result = JSON.parse(xhr.responseText);options.success(result)}}
}

4、判断请求类型

toUpperCase()函数:转化为大写

if(options.methods.toUpperCase() === 'GET') { // 发起GET请求// 创建请求xhr.open(options.methods,options.url + '?' + qs);// 发送Ajax请求xhr.send();
}else if(options.methods.toUpperCase() === 'POST') {     // 发起POST请求// 创建请求xhr.open(options.methods,options.url);// 设置Content-Type属性(固定写法)xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');// 发送Ajax请求xhr.send(qs)
}

五、使用封装的Ajax函数发送请求

MyAjax.js代码

// 定义resoveData()函数处理data参数
function resoveData(data){var arr = [];for(var k in data){arr.push(k + '=' + data[k]);};return arr.join('&');
}// 定义myAjax()函数
function myAjax(options){var xhr = new XMLHttpRequest();// 拼接查询字符串var qs = resoveData(options.data);// 判断请求类型if(options.methods.toUpperCase() === 'GET') {// 发起GET请求xhr.open(options.methods,options.url + '?' + qs);xhr.send();}else if(options.methods.toUpperCase() === 'POST') {// 发起POST请求xhr.open(options.methods,options.url);xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');xhr.send(qs)}// 监听请求状态改变的事件xhr.onreadystatechange = function (){if(xhr.readyState == 4 && xhr.status == 200) {// JSON字符串转化为JS对象var result = JSON.parse(xhr.responseText);options.success(result)}}
}

index.js代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 导入自定义的ajax函数库 --><script src="./MyAjax.js"></script><title>Document</title>
</head>
<body><script>// 发起GET请求myAjax({method:'GET',url:'http://www.liulongbin.top:3006/api/getbooks',data:{id:1},success:function(res){ // 成功的回调函数console.log(res); //打印数据}});// 发起POST请求myAjax({method:'POST',url:'http://www.liulongbin.top:3006/api/addbook',data:{bookname:"憨瓜与波妞",author:"离奇6厘米",publisher:"郑州图书出版社"},success:function(res){ // 成功的回调函数console.log(res); //打印数据}})</script>
</body>
</html>

运行结果
在这里插入图片描述

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

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

相关文章

Clustering and Projected Clustering with Adaptive Neighbors

摘要 在本文中&#xff0c;提出了一种新的聚类模型来同时学习数据相似矩阵和聚类结构。新模型通过基于局部距离为每个数据点分配自适应和最优邻居来学习数据相似性矩阵。同时&#xff0c;对数据相似性矩阵的拉普拉斯矩阵施加新的秩约束&#xff0c;使得得到的相似性矩阵中的连…

特殊的线性规划:目标函数中的变量数目少于约束中的变量数目

如下&#xff0c;目标函数为min(x1)&#xff0c;该函数中只存在一个变量x1&#xff0c;但是约束中存在x2变量&#xff0c;线性规划还能求解吗&#xff1f;如下&#xff0c;目标函数为min (x_1)&#xff0c;该函数中只存在一个变量x_1&#xff0c;但是约束中存在x_2变量&#xf…

ES Elasticsearch

ES 本章知识点 三 ES简介 3.1 数据分类 我们生活中的数据总体分为三种&#xff1a;结构化数据&#xff0c;非结构化数据&#xff0c;半结构化数据结构化数据&#xff1a;指具有固定格式或有限长度的数据&#xff0c;如数据库&#xff0c;元数据等。 非结构化数据&#xff1…

【百日刷题计划 第十一天】——熟悉函数,递归及递推 函数,递归及递推基础题

文章目录&#x1f4a5;前言&#x1f609;解题报告&#x1f4a5;[NOIP2001 普及组] 数的计算&#x1f914;一、思路:&#x1f60e;二、源码&#xff1a;&#x1f62e;三、代码分析&#xff1a;&#x1f917; 鸡汤来咯&#xff1a;&#x1f4a5;前言 ☀️大家好☀️&#xff0c;我…

2018年美亚杯电子数据取证大赛-团体赛

&#x1f60b;大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白&#xff0c;正在自学ing。 本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;一起学习&#x1f497;&#xff0c;一起进步⭐️。 ⭐️此后如竟没有炬火&#xff0c;我便是唯一的光。⭐️ 目…

RISC-V学习基础(五)

RISC-V汇编语言 C程序翻译成为可以在计算机上执行的机器语言程序的四个经典步骤。 函数调用规范&#xff08;Calling convention&#xff09; 函数调用过程通常分为6个阶段&#xff1a; 将参数存储到函数能够访问的位置。跳转到函数开始位置&#xff08;使用RV32I的jal指令…

考研图论算法

图论——txf 倘若考研需要像写算法题目那样&#xff0c;写出图论的代码&#xff0c;那无疑图论是最难级别的。 -----Williams Tian 1. 重点表述 ①线形表可以空表&#xff0c;树可以空树&#xff0c;但是图不能一个顶点也没有&#xff08;允许一条边也没有&#xff09;. ②…

ETC-4 week 3th

ETC-4 week 3th 出奇至胜 read They are only charged for the amount of power they consume on rainy days.They needn’t pay a single cent for their power consumption(消耗能量) on sunny days.(13 june) consume v 消耗 耗尽 吃光 喝光 沉溺 浪费LOL consumes(消耗…

安装docker,打包jar包镜像文件,输出tar压缩包

打包 jar 步骤在文章最后&#xff0c;不需要安装的请直接跳到文末查看 一键安装命令&#xff1a; curl -sSL https://get.daocloud.io/docker | sh设置开机自启并启动docker systemctl enable docker.service启动docker systemctl start docker查看docker状态 systemctl s…

创新洞见|2023年B2B业务为何必须采用PLG增长策略

随着采用PLG模式的大型企业数量不断增加&#xff0c;91%的公司计划在2022年增加对PLG战略的投资&#xff0c;市场上已经验证了PLG公司的表现优于其竞争对手&#xff0c;规模增长更快&#xff0c;并拥有更高的企业价值&#xff08;EV&#xff09;。PLG象征着购买决策者的转变&am…

【附源码】计算机毕业设计SSM数据时代下的疫情管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java多线程之Thread和Runnable关于共享资源的对比

背景 Thread和Runnable关于共享资源的对比&#xff0c;网上看到很多不正确的结论如下&#xff1a; Thread类创建多线程&#xff0c;无法保证多个线程对共享资源的正确操作&#xff0c;而Runnable接口可以保证多个线程对共享资源的正确访问。 得到这个结论的原因如下&#xff1…

【Pytorch】learning notes

文章目录【torch.xxx】torch.addmm() / torch.addmm_()torch.clamp() / torch.clamp_()torch.eq() / torch.ne()torch.manual_seed()torch.unique()torch.save() / torch.load()torch.view() / torch.permute() / torch. transpose() / torch.reshape()【torch.cuda.xxx】torch…

可以替代911s5的这几款产品还有跨境人士不知道吗?

不久前跨境电商用户都收到的坏消息无疑就是&#xff1a;911s5正式宣布停止运营并永久关闭。对于911s5&#xff0c;相信几乎所有的跨境电商用户都知道&#xff0c;因为其低廉的价格一直很受欢迎。所以一时间大家纷纷寻找911s5的替代品&#xff0c;但不是那么容易找的。今天这篇文…

投资组合图形化:EAP.util.plot

实证资产定价&#xff08;Empirical asset pricing&#xff09;已经发布于Github和Pypi. 包的具体用法(Documentation)博主将会陆续在CSDN中详细介绍&#xff0c;也可以通过Pypi直接查看。 Pypi: pip install --upgrade EAP HomePage&#xff1a; EAP a catchy description …

38 字典名[键名]=值 向字典增加键值对

38 字典名[键名]值 向字典增加键值对 文章目录38 字典名[键名]值 向字典增加键值对1. 语法2. 代码示例1. 字典中有要操作的键名—作用为修改2. 字典中没有要操作的键名—作用是增加3. 课后练习4. 列表增加元素知识回顾5. 总结1. 语法 向字典中增加键值对和修改字典的值的语法结…

开箱即用的数据缓存服务|EMQX Cloud 影子服务应用场景解析

在物联网业务高速迭代的今天&#xff0c;快速连接物联网设备与平台应用&#xff0c;实现业务快速落地与市场验证&#xff0c;是很多企业塑造核心竞争力、实现业务创新的关键。 EMQX Cloud 作为一站式运维代管的 MQTT 消息云服务&#xff0c;可以帮助用户在公有云环境中快速实现…

JavaScript:模拟拍照

实现拍照功能需要使用电脑的摄像头&#xff0c;可以使用 navigator.mediaDevices.getUserMedia() 方法&#xff0c;传递相应的参数就能开启摄像头 navigator.mediaDevices 是一个媒体设备对象&#xff0c;通过 getUserMedia( )方法开启音频和视频媒体设备。 getUserMedia 参数…

文献阅读-融合注意力机制的 IETM 细粒度跨模态检索算法

引用格式&#xff1a;翟一琛&#xff0c;顾佼佼&#xff0c;宗富强&#xff0c;姜文志&#xff0e;融合注意力机制的 IETM 细粒度跨模态 检索算法[J/OL]&#xff0e;系统工程与电子技术. https://kns.cnki.net/kcms/detail/11.2422.TN.20220823.1030.004.html 期刊&#xff1a…

跟李沐学AI-动手学深度学习1

整体内容 神经网络可以理解为是一种语言 数学和代码的结合&#xff0c;道术结合&#xff0c;关键在动手 是什么&#xff0c;怎么做&#xff0c;为什么这样 发展知识和应用 广告点击预测三个步骤 预测和训练 模型控制广告展现 数据格式 0维&#xff0c;1维&#xff0c…