前一篇文章 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 元数据请求响应的解析原理分析相关推荐

  1. SAP UI5 应用的 OData XML 格式的元数据请求解析原理,基于 DOMParser

    前一篇文章SAP UI5 应用的 OData 元数据请求响应的解析原理分析我们介绍了 SAP UI5 OData 元数据解析的入口.本文继续介绍基于 DOMParser 的 XML 数据解析原理. 入 ...

  2. 深入学习SAP UI5框架代码系列之四:SAP UI5控件的元数据实现

    这是Jerry 2021年的第5篇文章,也是汪子熙公众号总共第276篇原创文章. 系列目录 (0) SAP UI5应用开发人员了解UI5框架代码的意义 (1) UI5 module懒加载机制 (2) ...

  3. SAP UI5 应用开发教程之三十九 - SAP UI5 应用出现白屏的一些常见错误和分析方法分享试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  4. SAP UI5 的 sap-ui-bootstrap script 脚本标签各属性解析

    看这段测试代码: <!DOCTYPE html> <html> <head><meta charset="utf-8"><ti ...

  5. SAP UI5 应用开发教程之三十九 - SAP UI5 应用出现白屏的一些常见错误和分析方法分享

    SAP UI5 应用开发完毕后,加载时没有显示任何内容,只有一个白茫茫的空白屏幕(blank screen),无疑是让很多 SAP UI5 开发人员感到沮丧的事情. 然而这种白屏总是伴随着浏览器(比如 ...

  6. SAP UI5 应用在 Business Application Studio 里的构建单步分析

    SAP Business Application Studio 里打开一个 SAP UI5 应用,选中 mta.yaml 文件进行构建:Build MTA Project: 本文介绍选择了这个菜单之后 ...

  7. SAP UI5应用访问OData metadata的url和Destination

    在SAP WebIDE里随便创建一个新的Fiori应用,访问一个OData服务: 直接在WebIDE里本地运行该Fiori应用,在Chrome开发者工具里把metadata请求的url抄下来: url ...

  8. CRM Fiori launchpad请求响应结果的字段分析

    该HTTP请求的回应正文是一个庞大的JSON字符串,概貌如下: id:SAP_CRM_BCG_SalesRep 这个catalog上可以配置很多Fiori Tile: 详细研究这个特别的catalog ...

  9. SAP UI5 OData谣言粉碎机:极短时间内发送两个Odata request,前一个会自动被cancel掉吗

    这是Jerry 2021年的第 9 篇文章,也是汪子熙公众号总共第 280 篇原创文章. 本文Jerry原本写于2016年5月,当时发布于团队内部wiki. 五年过后,Jerry使用的开发框架,从SA ...

最新文章

  1. invoke 数组_如何对一个亿的数组进行快速排序
  2. php cannot load service mmap.,php swoole 安装失败
  3. LINUX下源码包安装mysql
  4. chrome remote desktop_无损音乐下载神器!洛雪音乐助手lx-music-desktop
  5. 转: Linux Grep 命令说明
  6. Inside ARC — to see the code inserted by the compiler
  7. Symbian 5800 重力开发的一些数据
  8. Android课程---Android Studio使用小技巧:提取方法代码片段
  9. 互联网大数据对教育的重要性
  10. 简练软考知识点整理-管理项目团队
  11. 不在更改国内网络账号的ID了
  12. bzoj1207 [HNOI2004]打鼹鼠
  13. 一元多次方程C语言,C语言解决多元多次方程.(19页)-原创力文档
  14. linux nginx启动脚本,Nginx启动脚本大家来找茬
  15. android 4.4 短信拦截,Android 4.4 KitKat升级率已经接近18%
  16. OpenJDK源码赏析之三:Java命令参数的读取处理流程
  17. EarlyStopping早停法的实现原理
  18. 解决鼠标右键菜单在光标左边问题
  19. (转)Windows7轻松备份--“Windows7一键恢复”简明教程
  20. Opencv学习笔记(八) -- 图像色彩空间转换

热门文章

  1. 209. 单点登录(SSO)
  2. 5种最流行的AI编程语言
  3. mysql用户创建,及授权
  4. C++关键字(1)——const
  5. 经典SQL语句大全(技巧篇)
  6. 一起谈.NET技术,C#权限管理和设计浅谈
  7. 利用脚本批量添加域用户账户
  8. http2.0 的时代来了
  9. rabbitmq(四)、消息丢失问题
  10. Centos7 安装 opencv