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对象。///
