离子http请求在仿真器和设备中不起作用

时间:2015-10-12 00:20:02

标签: ionic-framework ionic

我遇到的问题是,我的离子应用可以在浏览器中的红头和设备上的Ionic视图应用中访问我的Node API,但不能在模拟器或设备本身上访问。我已经仔细检查过我已经安装了白名单插件并且所有内容都在其位置。我还打开了allow-intent,允许导航并允许原点一直没有运气。有没有其他人有这样或类似的问题,其中Ionic应用程序无法向模拟器和设备中的API发出请求?

这是错误源自的地方。

在我的路线中,我有:

`angular.module('应用')     .config(function($ stateProvider){         $ stateProvider             .state(' app.events',{                 url:' / events',                 观点:{                     ' menuContent':{                         templateUrl:' app / events / events.html',                         控制器:' EventsCtrl',                         解决:{                             events:function(DataCache){

    CacheFactory('dataCache', {
        maxAge: 60 * 60 * 1000,
        cacheFlushInterval: 2 * 60 * 60 * 1000,
        deleteOnExpire: 'aggressive',
        storageMode: 'localStorage'
    });

    return {
        get: function(dataName) {
            var deferred = $q.defer(),
                dataCache = CacheFactory.get('dataCache');

            Loader.show();

            if (dataCache.get(dataName)) {
                Loader.hide();
                deferred.resolve(dataCache.get(dataName));
            } else {

                $http.get(API + dataName)
                    .success(function(data) {

                        if (dataName === 'twitter') {
                            angular.forEach(data, function(item) {
                                if (item.created_at) {
                                    item.created_at = convertToISO(item.created_at);
                                }
                            });
                        }

                        dataCache.put(dataName, data);
                        Loader.hide();
                        deferred.resolve(data);
                    })
                    .error(function() {
                        Loader.hide();
                        alert('error here');
                        deferred.reject();
                    });
            }

            return deferred.promise;
        },
        reload: function(dataName) {
            var deferred = $q.defer(),
                dataCache = CacheFactory.get('dataCache');

            Loader.show();

            $http.get(API + dataName)
                .success(function(data) {
                    dataCache.put(dataName, data);
                    Loader.hide();
                    deferred.resolve(data);
                })
                .error(function() {
                    Loader.hide();

                    deferred.reject();
                });

            return deferred.promise;
        }
    };
});

`

此解析调用DataCache服务,如下所示:

`angular.module('应用')     .service(' DataCache',function($ q,$ http,Loader,CacheFactory,API){         var convertToISO = function(date){             返回新日期(日期);         };

        $rootScope.$on('$stateChangeError', function(event) {
            event.preventDefault();
            showErrorAlert();
            return $state.go(arguments[3]);
        });
    });

`

在get函数中,应用程序将尝试发出$ http请求,因为没有数据可用,然后失败并陷入错误捕获,您看到警报('错误在这里');

然后这会触发状态更改错误,从我的主app.js文件中调用它

` .run(function($ ionicPlatform,$ ionicLoading,$ ionicPopup,$ rootScope,$ state,Templates,$ cordovaNetwork,Network){         $ ionicPlatform.ready(function(){             var showErrorAlert = function(){                 $ ionicPopup.alert({                     标题:'检索数据时出错',                     模板:'抱歉,检索数据时出错。请再试一次。'                 });             };             //默认隐藏附件栏(将其删除以显示键盘上方的附件栏             //用于表单输入)             if(window.cordova&& window.cordova.plugins.Keyboard){                 cordova.plugins.Keyboard.hideKeyboardAccessoryBar(真);             }             if(window.StatusBar){                 //需要org.apache.cordova.statusbar                 StatusBar.styleDefault();             }             //加载模板             Templates.load();             //检查网络是否在线             Network.isOnline = $ cordovaNetwork.isOnline();             //听网络上线             $ rootScope。$ on(' $ cordovaNetwork:online',function(){                 Network.isOnline = $ cordovaNetwork.isOnline();             });             //听网络离线             $ rootScope。$ on(' $ cordovaNetwork:offline',function(){                 警报('离线');                 Network.isOnline = $ cordovaNetwork.isOnline();             });

{{1}}

`

2 个答案:

答案 0 :(得分:0)

请试试..

关闭所有浏览器..

步骤1获取浏览器路径(建议使用Chrome)

步骤2打开命令提示符

步骤3运行命令"您的浏览器路径--disable-web-security"

它为我工作..

答案 1 :(得分:0)

请为Android尝试此操作

添加cordova-plugin-whitelist插件

删除CSP的元标记,config.xml中添加的行似乎现在正常工作:

<access origin="*"/>
<allow-intent href="*"/>
<allow-navigation href="*"/>