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 元数据请求响应的解析原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 早报:欧盟或将禁售iPhone?苹果15
- 下一篇: SAP UI5 应用开发教程之三十四 -