首页 文章

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

提问于
浏览
0

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

这是错误的起源 .

在我的路线中,我有:

`angular.module('app') . config(function($ stateProvider){$ stateProvider .state('app.events',{url:'/ events',views:{'menuContent':{templateUrl:'app / events / events.html',controller:'EventsCtrl',resolve:{events:function(DataCache){

return DataCache.get('events/active').then(function(data) {

                                return data;
                            });
                        }
                    }
                }
            }
        });
});

`

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

`angular.module('app') . service('DataCache',function($ q,$ http,Loader,CacheFactory,API){var convertToISO = function(date){return new Date(date);};

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;
        }
    };
});

`

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

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

`.run(函数($ ionicPlatform,$ ionicLoading,$ ionicPopup,$ rootScope,$ state,Templates,$ cordovaNetwork,Network){$ ionicPlatform.ready(function(){var showErrorAlert = function(){$ ionicPopup.alert( {title:'检索数据时出错',模板:'抱歉,检索数据时出错 . 请重试 . '});}; //默认隐藏附件栏(删除此项以显示键盘上方的附件栏) //用于表单输入)if(window.cordova && window.cordova.plugins.Keyboard){cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);} if(window.StatusBar){// org.apache.cordova.statusbar required StatusBar.styleDefault();} //加载模板Templates.load(); //检查网络是否在线Network.isOnline = $ cordovaNetwork.isOnline(); //监听网络上线$ rootScope . $ on(' $ cordovaNetwork:online',function(){Network.isOnline = $ cordovaNetwork.isOnline();}); //监听网络离线$ rootScope . $ on('$ cordovaNetwork:offline',function(){alert (“OFFL INE'); Network.isOnline = $ cordovaNetwork.isOnline(); });

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

`

2 回答

  • 0

    Please try this..

    关闭所有浏览器..

    第1步获取浏览器路径(建议使用chrome)

    步骤2打开命令提示符

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

    它为我工作..

  • 0

    请尝试这个为Android

    添加cordova-plugin-whitelist插件

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

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

相关问题