和服务端系统的通信

首先web网站 前端浏览器 和 后端系统 是通过HTTP协议进行通信的

同步请求&异步请求:

同步请求:可以从浏览器中直接获取的(HTML/CSS/JS这样的静态文件资源),这种获取请求的http称为同步请求

异步请求:js代码需要到服务端提交、获取数据(往往是要求服务端程序进行数据库操作后,再进行代码处理,返回的数据),这种请求的http称为异步请求,往往被称为API请求;提供这种服务的后端被称为 API服务端,这种服务接口被称为API接口。

XHR对象和服务端通信

浏览器的js环境内置了一个XMLHttpRequest类型,简称XHR,XHR对象有属性方法,支持 浏览器页面代码 和 服务端之间的通信 ;这种使用 XHR 对象 和 服务端之间的 通信技术,称为异步通信方式。

jQuery库 和服务端通信
jQuery构建异步请求消息
请求方法 —— jQuery库里的ajax()方法

发送get请求

$.ajax({  type: 'GET',        url : '/api/mgr/signin',  
})

发送post请求

$.ajax({  type: 'POST',        url : '/api/mgr/signin', data: {username:'byhy',password:'abc',}
})

type: HTTP的方法

url:请求的url地址(注意:这里url没有前面的 http://IP:端口 这部分,表示前面的这部分和当前网页前面的这部分相同)

data:请求消息体

简便写法:

$.get('/api/mgr/signin')$.post('/api/mgr/signin',{username:'byhy',password:'abc'}
)// 或者
$.get({        url : '/api/mgr/signin',  
})$.post({     url : '/api/mgr/signin', data: {username:'byhy',password:'abc',}
})

 可以把上述代码放到HTML中,名为 test.html

<!DOCTYPE html>
<html><head><script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
</head><body><script>$.get('/api/mgr/signin')</script>
</body>
</html>
构建请求url和url参数

url参数:?后面的部分,每个参数间用&隔开

由于浏览器内置有 URLSearchParams 类型 ,URLSearchParams对象的方法 toString ,可以将对象序列化为 urlencoded 格式(将参数拼接起来)

var queryStr = new URLSearchParams({code:'6000001', time:'2022-02-23' }).toString()$.get(`http://localhost/api/stock?${queryStr}`)

 简便写法:jQuery的param方法

var queryStr = $.param({code:'6000001', time:'2022-02-23' })$.get(`http://localhost/api/stock?${queryStr}`)
构建请求消息的消息头

通过headers属性设置,需要指定的填进去就可以了

需要指定的都是一些用在认证上的额外的消息头

$.ajax({  type: 'GET',url: '/api/something',headers: {"X-Test-Header": "test-value"}
})

特:contentType —— 指定消息体格式

ajax方法的参数对象 contentType 可以直接设置消息头 contentType 的值;缺省为: application/x-www-form-urlencoded; charset=UTF-8 => urlencoded格式

原本

$.ajax({  url: '/api/something',type: 'GET', headers: {"contentType": "application/json"}
})

替换为

$.ajax({  url: '/api/something',type: 'GET', contentType: 'application/json'
})
构建请求消息体

通过data属性设置消息头内容

消息头格式:

urlencode格式

如果是jQuery发送的请求, data参数是 Object,缺省行为就是转化为 urlencode格式

$.ajax({// 提交的网址url: 'http://localhost/api/mgr/signin',        type: 'POST',        data: { username: 'byhy', password:'88888888' }
})

JSON格式

如果消息体是JSON格式的字符串,可以使用浏览器js的内置对象JSON的stringify方法,将js对象转化为JSON格式的字符串(序列化)

$.ajax({url: '/api/mgr/signin',        type: 'POST',       contentType : 'application/json', data: JSON.stringify({ username: 'byhy', password:'88888888'})
})

推荐

let body =  JSON.stringify(
{ username: 'byhy', password:'88888888'
}
)$.ajax({url: '/api/mgr/signin',        type: 'POST',       contentType : 'application/json', data: body,
})

当然也可以直接在data里写出它的JSON格式

$.ajax({url: '/api/mgr/signin',        type: 'POST',       contentType : 'application/json', data: `{"username": "byhy", "password":"88888888"}`
})
jQuery解析响应消息
解析响应消息头

如果使用的是jQuery,那么ajax提供了一个success这个属性,它的参数是一个函数,定义了成功接收到HTTP响应消息的回调函数(当服务端返回给你响应时,就会回调success后面定义的这个函数,定义函数的时候要注明接收三个参数,其中第3个参数为jqXHR的对象(它是XMLHTTPRequest的扩展类型,封装了一些便捷方法)

$.ajax({url: '/api/mgr/signin',        type: 'POST', data: 'username=byhy&password=88888888',// success 成功接收到响应success: function(data, textStatus, xhr) { // 想获取响应消息状态码console.log(textStatus);// 获取所有消息头console.log(xhr.getAllResponseHeaders());// 获取某个消息头console.log(xhr.getResponseHeader("content-length"));},// 没接收到相应 , 没指定就不处理了 ,指定了就在error里定义 ;errorThrown为错误信息error:function (xhr, textStatus, errorThrown ){console.error(`${xhr.status} \n${textStatus} \n${errorThrown }`)}
})
解析响应消息体
$.ajax({url: '/api/mgr/signin',        type: 'POST', data: 'username=byhy&password=88888888',// 正确返回success: function(data, textStatus, xhr) { //获取响应消息体的数据console.log(data)}
})

jQuery会根据响应的消息头content-type,猜测响应消息体的格式;登录成功后,jQuery 会自动反序列化为 js中对应的数据对象(Object类型), 传递给 data参数。

如果你知道响应消息体的数据格式,可以设置 ajax 参数 settings 的 dataType 属性,说明data的类型(不用它猜了)

$.ajax({url: '/api/mgr/signin',        type: 'POST', data: 'username=byhy&password=88888888',// 响应消息格式 预设为 json, dataType: 'json', // 正确返回success: function(data, textStatus, xhr) { console.log(data)}
})

dataType 属性还可以是:XML、html、text(自定义的格式)

本文参考自:和服务端通信 - 白月黑羽 (byhy.net) 

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

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

相关文章

Android12_13左上角状态栏数字时间显示右移动

文章目录 问题场景解决问题 一、基础资料二、代码追踪三、解决方案布局的角度解决更改paddingStart 的默认值设置marginLeft 值 硬编码的角度解决 问题场景 1&#xff09;早期一般屏幕都是方形的&#xff0c;但是曲面屏&#xff0c;比如&#xff1a;好多车机Android产品、魔镜…

springboot 的共享session方案?

问&#xff1a;springboot 的共享session方案&#xff1f; 参考&#xff1a; https://juejin.cn/post/7195227930077691963分布式之session共享问题 4种解决方案及spring session的使用_分布式session共享方案-CSDN博客 什么是 Session &#xff1f; 答&#xff1a;因为Http协…

杂七杂八-部署框架

杂七杂八-部署框架 docker docker dockerhub&#xff1a;Docker发布/上传镜像到dockerhub&&下载/拉取镜像&&删除dockerhub镜像 仅个人笔记使用&#xff0c;感谢点赞关注 目前仅专注于 NLP 大模型 机器学习和前后端的技术学习和分享 感谢大家的关注与支持&…

前端技术(七)——less 教程

一、less简介 1. less是什么&#xff1f; less是一种动态样式语言&#xff0c;属于css预处理器的范畴&#xff0c;它扩展了CSS语言&#xff0c;增加了变量、Mixin、函数等特性&#xff0c;使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 &#xff0c;也可以借助Node.js在服…

STM32CubeMx学习笔记——GPIO使用

一、新建工程 1、选择芯片型号 2、配置时钟RCC 选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器) ​ 3、时钟树配置 在clock Configuration中将HCLK配置为最高频率然后回车 ​ 4、选择调试模式 SYS 设置&#xff0c;选择 Debug 为 Serial Wire …

Qt qrc机制

文章目录 0. 前言1. qrc机制2. qrc使用 0. 前言 要设置窗口图标&#xff0c;就需要有图片及其图片所在路径&#xff0c;在本机上可能没什么问题&#xff0c;但是换了一个机器&#xff0c;路径可能不一致或者图片丢失&#xff0c;这就导致图片显示不出来。 Qt引入qrc机制&…

【零基础学习CAPL】——CRC值监控测试

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 ——————————————————————————————————–—— 从0开始学习CANoe使用 从0开始学习车载车身 相信时间的力量 星光不负赶路者,时光不负有心人。 目录 1.概述2.需求介绍3.算法4.逻辑判断5.测…

swift qwen2-vl推理及加载lora使用案例

参考: https://swift.readthedocs.io/zh-cn/latest/Instruction/LLM%E5%BE%AE%E8%B0%83%E6%96%87%E6%A1%A3.html#%E5%BE%AE%E8%B0%83%E5%90%8E%E6%A8%A1%E5%9E%8B https://blog.csdn.net/weixin_42357472/article/details/142150209 SWIFT支持300+ LLM和50+ MLLM(多模态大模型…

《程序猿之设计模式实战 · 装饰者模式》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

欢迎来到我的Java世界“抽象类”

前言 在上篇中我们学习到了继承的概念、语法等等&#xff0c;那么小编将来为大家方享下一篇Java中的抽象类。 1.抽象类的概念 2.抽象类的语法 3.抽象类的特性 4.抽象类的作用 一&#xff1a;讲到抽象类&#xff0c;大家是不是会很迷惑什么是抽象类&#xff1f; 在面向对象…

安卓framework美化手势导航侧滑返回UI

文章目录 手势导航的侧滑返回效果图原生效果如下:要实现的功能,: 实现代码1. 初始化代码2. 修改绘制的代码,进行箭头与退出UI的显示3. 拖动的时候手指上下移动时,箭头ui跟着移动 以下是一些其他可以美化安卓右滑手势拖动 UI 的方法&#xff1a;视觉效果方面形状和布局方面 安卓…

加密软件有哪些数据防护功能?

1.文件透明加密&#xff1a;采用透明加密技术&#xff0c;自动对指定类型的敏感文件进行实时加密&#xff0c;确保数据在存储和传输过程中的安全性。 2.权限管理与访问控制&#xff1a;通过细粒度的权限管理&#xff0c;控制员工对敏感数据的访问权限&#xff0c;包括读取、修…

PHP一键约课高效健身智能健身管理系统小程序源码

一键约课&#xff0c;高效健身 —— 智能健身管理系统让健康触手可及 &#x1f3cb;️‍♀️ 告别繁琐&#xff0c;一键开启健身之旅 你还在为每次去健身房前的繁琐预约流程而烦恼吗&#xff1f;现在有了“一键约课高效健身智能健身管理系统”&#xff0c;所有问题都迎刃而解…

Solana核心漏洞技术详解

8月9日&#xff0c;Solana团队齐心协力解决了一个严重的安全漏洞。这次秘密修复详情可以在GitHub上查询到。CertiK团队对这一漏洞进行了深入分析。 1. Solana漏洞起因 8月9日&#xff0c;Solana验证者和客户端团队齐心协力解决了一个严重的安全漏洞。Solana验证者Laine表示&am…

TypeScript 扩展

扩展 ?:可选参数 可选链事实上并不是TypeScript独有的特性&#xff0c;它是ES11&#xff08;ES2020&#xff09;中增加的特性 可选链使用可选链操作符 ? 作用是当对象的属性不存在时&#xff0c;会短路&#xff0c;直接返回undefined&#xff0c;如果存在&#xff0c;那么…

【机器学习】从零开始理解深度学习——揭开神经网络的神秘面纱

1. 引言 随着技术的飞速发展,人工智能(AI)已从学术研究的实验室走向现实应用的舞台,成为推动现代社会变革的核心动力之一。而在这一进程中,深度学习(Deep Learning)因其在大规模数据处理和复杂问题求解中的卓越表现,迅速崛起为人工智能的最前沿技术。深度学习的核心是…

安卓玩机工具-----ADB方式的刷机玩机工具“秋之盒”’ 测试各项功能预览

秋之盒 安卓玩机工具-秋之盒是一款ADB刷机工具箱&#xff0c;基于谷歌ADB的一款绿色安装&#xff0c;具备了海量扩展模块,支持ADB刷机救砖、一键激活黑域、adb指令修复等功能&#xff0c;是一款开源、免费、易用的手机刷机工具&#xff01; 并且是一款开源、免费、易用的图形化…

细致刨析JDBC ① 基础篇

目录 一、JDBC概述 1.JDBC的概念 ​编辑2.JDBC的核心组成 ① 接口规范: ② 实现规范: 二、JDBC快速入门 1.JDBC搭建步骤 三、核心API理解 1.注册驱动 2.Connection 3.Statement 4.PreparedStatement 5.ResultSet 四、基于Preparedment实现CRUD 1.查询单行单列 2.查询单行…

P3565 [POI2014] HOT-Hotels

~~~~~ P3565 [POI2014] HOT-Hotels ~~~~~ 总题单链接 ~~~~~ 2024.9.10&#xff1a;DP方程有问题&#xff0c;已修改&#xff0c;同时更新了长链剖分优化版本。 思路 ~~~~~ 设 g [ u ] [ i ] g[u][i] g[u][i] 表示在 u u u 的子树内&#xff0c;距离 u u u 为 i i i 的点的…

管家婆云辉煌手机端怎么连接蓝牙打印机?

管家婆云辉煌手机端可以连接蓝牙打印机&#xff0c;这样手机可以发送打印任务到蓝牙打印机&#xff0c;完成打印任务。具体的设置步骤如下&#xff1a; 一、首先完成手机和蓝牙打印机配对&#xff0c;打开蓝牙打印机后。手机开启蓝牙和定位服务 点击手机设置&#xff0c;进入手…