当前位置: 首页 > Web前端 > HTML

SAP UI5 应用的 OData 元数据请求的发送原理分析

时间:2023-03-27 23:51:13 HTML

SAPUI5应用OData元数据请求发送原理分析24-如何使用OData数据模型,在Chrome开发者工具中可以观察到SAPUI5框架自动发出的元数据请求。请求的url:https://services.odata.org/V2...$metadata?sap-language=EN这个请求没有content-type字段,只有一个accept字段,值为:application/xml和一个MaxDataServiceVersion,在值为3.0的response的header字段中,没有Accept字段,只有Content-Type字段,注意大小写:发起HTTP请求的具体代码位置:ODataMetadata的_loadMetadata方法:触发_loadMetadata中的constructor:createbasedonurlrequestobject:根据以下API获取HTTP请求支持的语言:Accept-Languagesap.ui.getCore().getConfiguration().getLanguageTag()计算得出:en-USbAsync标志为true,这意味着这是一个异步请求:withCredentials标志位为false:然后使用传统的promiseAPI发起请求:如果元数据加载成功,则在其回调中执行初始化逻辑:if(!this.oMetadata.isLoaded()){this.oMetadata.attachFailed(this.onMetadataFailed);接下来调用ODataAPI,传入新建的request对象,发送请求:进入datajs.js,首先prepareRequest:normalizeHeaders:规范化header字段,其实就是将header字段转为小写:然后调用InvokeRequest是sent:交给httpClient:datajs.js底层还是基于XHR,即XmlHttpRequest:直接使用浏览器原生的XMLHttpRequest:这里的fallback机制使用的是非常古老的ActiveXObject,现代浏览器不会执行:varcreateXmlHttpRequest=function(){///<总结>创建一个XmlHttpRequest对象。///XmlHttpRequest对象。if(window.XMLHttpRequest){returnnewwindow.XMLHttpRequest();}变种异常;if(window.ActiveXObject){try{returnnewwindow.ActiveXObject("Msxml2.XMLHTTP.6.0");}catch(_){try{returnnewwindow.ActiveXObject("Msxml2.XMLHTTP.3.0");}catch(e){异常=e;}}}else{exception={消息:“不支持XMLHttpRequest”};抛出异常;};最后调用xhr.open:使用sendapi发送更多Jerry的原创文章,全部在:《王梓熙》: