前一篇文章 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 的原创文章,尽在:” 汪子熙 ”: