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

和服务端系统的通信

首先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) 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 正则表达式之grep
  • [C#学习笔记]注释
  • 信息学奥赛初赛天天练-86-NOIP2014普及组-基础题5-球盒问题、枚举算法、单源最短路、Dijkstra算法、Bellman-Ford算法
  • 营养方案调整执行流程 第十篇
  • Spring Batch
  • FPGA开发:Verilog数字设计基础
  • [论文笔记]QLoRA: Efficient Finetuning of Quantized LLMs
  • ios免签H5
  • tiptap parseHTML renderHTML 使用
  • 系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践
  • 安卓下载工具箱_3.8.1/去浏览器跳转登录就是会员
  • 【一文读懂】NTN(非地面网络)技术介绍
  • vulhub GhostScript 沙箱绕过(CVE-2018-16509)
  • JS_循环结构
  • 【Python知识宝库】上下文管理器与with语句:资源管理的优雅方式
  • [PHP内核探索]PHP中的哈希表
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • FineReport中如何实现自动滚屏效果
  • Java超时控制的实现
  • java中的hashCode
  • js正则,这点儿就够用了
  • maya建模与骨骼动画快速实现人工鱼
  • Nodejs和JavaWeb协助开发
  • PV统计优化设计
  • Rancher-k8s加速安装文档
  • Redis的resp协议
  • Web标准制定过程
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 测试开发系类之接口自动化测试
  • 产品三维模型在线预览
  • 机器学习学习笔记一
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 跨域
  • 学习使用ExpressJS 4.0中的新Router
  • 自制字幕遮挡器
  • 《码出高效》学习笔记与书中错误记录
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • # include “ “ 和 # include < >两者的区别
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (12)Hive调优——count distinct去重优化
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (九)c52学习之旅-定时器
  • (十一)手动添加用户和文件的特殊权限
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)Sublime Text3配置Lua运行环境
  • (转载)Google Chrome调试JS
  • (转载)hibernate缓存