Невозможно использовать REST API в SAPUI5

Я пытаюсь разработать погодное приложение, которое использует сторонние сервисы (ссылка на API здесь), код для которого приведен в это ссылка. Когда я запускаю приложение, оно показывает таблицу без данных. Это также отображается как ошибка в моем файле View1.Controller, который я предоставил ниже.

View1.controller.js

        sap.ui.define([
        "sap/ui/core/mvc/Controller",
        "sap/ui/model/json/JSONModel"
    ], function(Controller) {
        "use strict";

        return Controller.extend("WeatherAPI.controller.View1", {


    onInit: function() {
                this._loadForecast();
            },

            _formatDate: function(date) {
                var d = new Date(date),
                    month = '' + (d.getMonth() + 1),
                    day = '' + d.getDate(),
                    year = d.getFullYear();

                if (month.length < 2) {
                    month = '0' + month;
                }
                if (day.length < 2){
                    day = '0' + day;    
                } 
                return [year, month, day].join('-');
            },

            _mapResults: function(results) {
                var oModel = this.getView().getModel();
                oModel.setProperty("/city", results.city.name);
                oModel.setProperty("/country", results.city.country);

                var aForecastResults = [];
                for (var i = 0; i < results.list.length; i++) {
                    var oTemp = results.list[i].temp;
                    var date = this._formatDate(results.list[i].dt * 1000);
                    aForecastResults.push({
                        date: date,
                        temp: oTemp.day,
                        units: "Celsius",
                        humidity: results.list[i].humidity
                    });
                }

                oModel.setProperty("/items", aForecastResults);
            },

            _loadForecast: function() {
                var oView = this.getView();
                var oParams = {
                    q: "London",  // Get the weather in london
                    units: "metric", 
                    appid: "fa2a1fb5db6debe044492728ca66a8f8",  // replace with your API key
                    cnt: 16,  // get weather for the next 16 days
                    mode: "json"  // get it in JSON format 
                };
                var sUrl = "/OpenWeather/data/2.5/forecast/daily";
                oView.setBusy(true);

                var self = this;

                $.get(sUrl, oParams)
                    .done(function(results) {
                        oView.setBusy(false);
                        self._mapResults(results);
                    })
                    .fail(function(err) {
                        oView.setBusy(false);
                        if (err !== undefined) {
                            var oErrorResponse = $.parseJSON(err.responseText); /*error : Uncaught SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>) */
                            sap.m.MessageToast.show(oErrorResponse.message, {
                                duration: 6000
                            });
                        } else {
                            sap.m.MessageToast.show("Unknown error!");
                        }
                    });
            }
        });
    });

модель.js

        sap.ui.define([
        "sap/ui/model/json/JSONModel",
        "sap/ui/Device"
    ], function(JSONModel, Device) {
        "use strict";

        return {

            createDeviceModel: function() {
                var oModel = new JSONModel(Device);
                oModel.setDefaultBindingMode("OneWay");
                return oModel;
            },

            createAPIModel: function() {
                var oModel = new JSONModel();
                oModel.setData({
                    city: "",
                    country: "",
                    cols: [{
                        name: "Date"
                    }, {
                        name: "Day Temperature"
                    }, {
                        name: "Units"
                    },{
                        name: "humidity"
                    }],
                    items: []
                });
                return oModel;          
            }


        };
    });

нео-app.json

 {
  "path": "/OpenWeather",
  "target": {
    "type": "destination",
    "name": "OpenWeather",
    "entryPath": "/"
  },
  "description": "Open weather API"}

Пожалуйста помоги. Спасибо.


person Swappy    schedule 23.01.2018    source источник
comment
Какая ошибка показывается? Пожалуйста, опубликуйте точное сообщение об ошибке, которое вы получили, а также номер строки, в которой произошла ошибка.   -  person Francesco Iannazzo    schedule 23.01.2018
comment
@FrancescoIannazzo Я упомянул ошибку в коде View1.controller.js в комментарии.   -  person Swappy    schedule 23.01.2018
comment
попробуйте проверить ответ, похоже, это html, а не json Chrome › Панель инструментов разработчика › Сеть, найдите вызов get и попробуйте открыть его в новой вкладке браузера.   -  person Péter Cataño    schedule 23.01.2018


Ответы (1)


Если ваше приложение вызывает API за пределами вашего домена, вы столкнетесь с проблемами CORS. Может быть, это так. Окно сетевого разработчика поможет вам разобраться в этом.

person D. Seah    schedule 24.01.2018