Access-Control-Allow-Headers в предпечатном ответе был заблокирован политикой CORS: поле заголовка запроса x-xhr-logon не разрешено - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь использовать внешний отдыхающий веб-сервис в sap ui5.Когда я использую то же самое в fiori launchpad, он выдает ошибку ниже cosole, и в приложение плитки не поступает никаких данных.Как я могу прийти с этим?Я проверил многие блоги, ссылающиеся на это, но не получил от этого никакой помощи.

Ошибка: доступ к XMLHttpRequest по адресу 'https://api.myjson.com/bins/ijyy2' из источника' url2 'заблокирован политикой CORS: ЗапросПоле заголовка x-xhr-logon не разрешено Access-Control-Allow-Headers в ответе перед полетом.

Примечание: url2 = https://sapmobile.mycompanyname.com - это не что иное, как наш URL панели запуска fiori.

С наилучшими пожеланиями Ram

1 Ответ

0 голосов
/ 05 февраля 2019

Это известная проблема Fiori Launchpad.Существует файл abap.js, который переопределяет метод send по умолчанию XMLHttpRequest.

Если вы добавляете внешний API в качестве нового места назначения в облачной платформе SAP (или используете веб-диспетчер в-premise environment), тогда больше не будет вызовов 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;
}
...