我正在尝试在sap ui5中使用外部Restful Web服务。当我在fiori启动板中使用相同的内容时,它将在cosole中抛出错误,并且平铺应用程序中没有数据。我该如何解决呢?我检查了许多博客,但都没有得到任何帮助。
错误: CORS策略已阻止从来源“ url2”访问“ https://api.myjson.com/bins/ijyy2”处的XMLHttpRequest:在飞行前响应中,Access-Control-Allow-Headers不允许请求标头字段x-xhr-logon。
注意:url2 = https://sapmobile.mycompanyname.com只是我们的意思 启动板网址。
最佳问候 拉姆
答案 0 :(得分:0)
这是一个已知的Fiori Launchpad问题。有一个文件abap.js
覆盖了send
的默认XMLHttpRequest
方法。
如果将外部API添加为SAP Cloud Platform中的新目的地(或在内部部署环境中使用Web Dispatcher),则不会再有CORS调用,因此就不会有CORS问题。
如果您要使用纯JavaScript解决方案,则可以使用两个函数来还原原始实现。将它们添加到您的控制器。
在访问外部API之前立即调用以下内容
_overrideRequestPrototype: function () {
if (!XMLHttpRequest._SAP_ENHANCED) {
return;
}
this.__send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function (oBody) {
let oChannel = {};
this._checkEventSubscriptions();
try {
oChannel = this._channel;
this._saveParams(oBody);
this._send(oBody);
if (oChannel) {
oChannel.sent();
}
} catch (oError) {
if (oChannel) {
oChannel["catch"](oError);
} else {
throw oError;
}
}
};
}
通话后,使用以下功能恢复SAP代码:
_restoreRequestPrototype: function () {
if (!XMLHttpRequest._SAP_ENHANCED) {
return;
}
XMLHttpRequest.prototype.send = this.__send;
}