SAP UI5 应用的 OData 元数据请求响应的解析原理分析
前一篇文章 SAP UI5 应用的 OData 元数据请求的发送原理分析我们学习了 SAP UI5 应用是如何自动发送 OData 元数据的 HTTP 请求。
本文继续学习该元数据请求的响应到达客户端之后,SAP UI5 框架是如何解析的。
当响应成功到达客户端后,回调函数被触发:
如果 xhr.readyState 不为 4,则直接返回。
metadata 请求的响应头部,Content-Type 为 application/xml:
构造 response 对象:
其中 xml 元数据的内容,存储在 xhr.responseText 内部。
因为 statusCode 为 200,进入 success 回调函数:
因为 response.data 为空,因此调用对应的 handle 去读取:
首先取得 content-type:
从 response header 字段里读取 Content-Type 字段:
使用;
作为分隔符:
使用分隔处理后的第一个元素作为结果:
我们自己构造的 response 对象的 body 字段,来自 xhr 标准对象的 responseText:
根据 media type 里存储的类型来获取对应的 handler?
handler 的 accept 字段必须包含 media type 里指定的类型:
如果 handler 验证通过,创建读写上下文对象:
if (handlerAccepts(handler, cType)) {var readContext = createReadWriteContext(cType, version, context, handler);readContext.response = response;response.data = parseCallback(handler, body, readContext);return response.data !== undefined;}
这里很有意思,contentType 为 Application/xml,但是 formatQueryString 却是 json 格式:
然后基于 handler 和 response 进行解析,将结果存储到 response 对象的 data 字段里。
xml Metadata 的解析器:metadataParser:
var metadataParser = function (handler, text) {/// <summary>Parses a metadata document.</summary>/// <param name="handler">This handler.</param>/// <param name="text" type="String">Metadata text.</param>/// <returns>An object representation of the conceptual model.</returns>var doc = xmlParse(text);var root = xmlFirstChildElement(doc);return parseConceptualModelElement(root) || undefined;};
进入 xmlParse 方法:可以看到里面使用的是 DOMParser:
DOMParser 可以将存储在字符串中的 XML 或 HTML 源代码解析为一个 DOM Document。
注意:XMLHttpRequest 支持从URL可寻址资源解析XML和HTML,在其response 属性中返回Document。
更多Jerry的原创文章,尽在:“汪子熙”:
SAP UI5 应用的 OData 元数据请求响应的解析原理分析相关推荐
- SAP UI5 应用的 OData XML 格式的元数据请求解析原理,基于 DOMParser
前一篇文章SAP UI5 应用的 OData 元数据请求响应的解析原理分析我们介绍了 SAP UI5 OData 元数据解析的入口.本文继续介绍基于 DOMParser 的 XML 数据解析原理. 入 ...
- 深入学习SAP UI5框架代码系列之四:SAP UI5控件的元数据实现
这是Jerry 2021年的第5篇文章,也是汪子熙公众号总共第276篇原创文章. 系列目录 (0) SAP UI5应用开发人员了解UI5框架代码的意义 (1) UI5 module懒加载机制 (2) ...
- SAP UI5 应用开发教程之三十九 - SAP UI5 应用出现白屏的一些常见错误和分析方法分享试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- SAP UI5 的 sap-ui-bootstrap script 脚本标签各属性解析
看这段测试代码: <!DOCTYPE html> <html> <head><meta charset="utf-8"><ti ...
- SAP UI5 应用开发教程之三十九 - SAP UI5 应用出现白屏的一些常见错误和分析方法分享
SAP UI5 应用开发完毕后,加载时没有显示任何内容,只有一个白茫茫的空白屏幕(blank screen),无疑是让很多 SAP UI5 开发人员感到沮丧的事情. 然而这种白屏总是伴随着浏览器(比如 ...
- SAP UI5 应用在 Business Application Studio 里的构建单步分析
SAP Business Application Studio 里打开一个 SAP UI5 应用,选中 mta.yaml 文件进行构建:Build MTA Project: 本文介绍选择了这个菜单之后 ...
- SAP UI5应用访问OData metadata的url和Destination
在SAP WebIDE里随便创建一个新的Fiori应用,访问一个OData服务: 直接在WebIDE里本地运行该Fiori应用,在Chrome开发者工具里把metadata请求的url抄下来: url ...
- CRM Fiori launchpad请求响应结果的字段分析
该HTTP请求的回应正文是一个庞大的JSON字符串,概貌如下: id:SAP_CRM_BCG_SalesRep 这个catalog上可以配置很多Fiori Tile: 详细研究这个特别的catalog ...
- SAP UI5 OData谣言粉碎机:极短时间内发送两个Odata request,前一个会自动被cancel掉吗
这是Jerry 2021年的第 9 篇文章,也是汪子熙公众号总共第 280 篇原创文章. 本文Jerry原本写于2016年5月,当时发布于团队内部wiki. 五年过后,Jerry使用的开发框架,从SA ...
最新文章
- invoke 数组_如何对一个亿的数组进行快速排序
- php cannot load service mmap.,php swoole 安装失败
- LINUX下源码包安装mysql
- chrome remote desktop_无损音乐下载神器!洛雪音乐助手lx-music-desktop
- 转: Linux Grep 命令说明
- Inside ARC — to see the code inserted by the compiler
- Symbian 5800 重力开发的一些数据
- Android课程---Android Studio使用小技巧:提取方法代码片段
- 互联网大数据对教育的重要性
- 简练软考知识点整理-管理项目团队
- 不在更改国内网络账号的ID了
- bzoj1207 [HNOI2004]打鼹鼠
- 一元多次方程C语言,C语言解决多元多次方程.(19页)-原创力文档
- linux nginx启动脚本,Nginx启动脚本大家来找茬
- android 4.4 短信拦截,Android 4.4 KitKat升级率已经接近18%
- OpenJDK源码赏析之三:Java命令参数的读取处理流程
- EarlyStopping早停法的实现原理
- 解决鼠标右键菜单在光标左边问题
- (转)Windows7轻松备份--“Windows7一键恢复”简明教程
- Opencv学习笔记(八) -- 图像色彩空间转换