为什么$ http请求无法在此Cordova应用程序中运行?

时间:2016-06-21 15:49:56

标签: javascript angularjs cordova ionic-framework

我正在尝试将代码中的数据带到我的应用程序中,这里是工厂。

angular.module('starter.services', [])

    .factory('Locations', function ($http, $q) {
        // Might use a resource here that returns a JSON array
            var url = "https://portal.mobilequbes.com/api/kiosks?callback=JSON_CALLBACK";
            var locations = function () {
                $http.jsonp(url)
                    .then(function (result) {
                        return result.data;
                    });
            };

        return {
            all: function () {
                return locations;
            },
            get: function (locId) {
                for (i = 0; i < locations.length;i++){
                    if (locations[i].friendlyName == parseInt(locId)) {
                        return locations[i];
                    }
                }
            }
        }
    });

和我的控制员:

.controller('MapCtrl', function ($scope, $http, Locations) {
    $scope.locations = Locations.all();
    $scope.createMarks = function () {
        createList(Locations.all());
    }
})

当它加载时,它只会加载任何或两个看起来像这样的对象:''

我不知道为什么,因为我似乎无法辨别出任何问题,我觉得我已经把这个看成是死的。我已经使用jsFiddle测试了返回函数,它工作正常,所以它与ionic / cordova有关,我相当肯定。

1 个答案:

答案 0 :(得分:1)

在您的工厂做,

angular.module('starter.services', [])

.factory('Locations', function ($http, $q) {
    // Might use a resource here that returns a JSON array
        var url = "https://portal.mobilequbes.com/api/kiosks?callback=JSON_CALLBACK";
        var locations = [];  //storing locations for future usage

    return {
        all: function () {
            return $http.jsonp(url)
                .then(function (result) {
                    locations = result.data;
                    return result.data;
                });
        },
        get: function (locId) {
            for (i = 0; i < locations.length;i++){
                if (locations[i].friendlyName == parseInt(locId)) {
                    return locations[i];
                }
            }
        }
    }
});

在您的控制器中,

.controller('MapCtrl', function ($scope, $http, Locations) {
    Locations.all().then(function (locations) {
         $scope.locations = locations;
    });
    $scope.createMarks = function () {
        createList(Locations.all());
    }
})

现在,Locations.all()方法将返回一个promise,该promise将解析为控制器中的 result.data ,您可以访问位置。

以前您没有返回任何内容,因此$ scope.locations未定义。