问题 Angular&Ionic,HTTP无法在真实设备IOS中工作


我在我的应用程序中遇到问题,当我在本地主机中运行应用程序时它没有问题,我可以看到频道列表但是当我尝试通过物理设备测试应用程序时它没有显示任何内容。我认为问题来自我用来通过http发送json数据的方法。

(function () {
'use strict';

angular.module('testApp').controller('ChannelCtrl', ['$state', 'testApi', ChannelCtrl]);

function ChannelCtrl($state, testApi) {
    var vm = this;

myscreenApi.getChannels().then(function(data){
         vm.channels = data;
     });

    vm.selectLeague = function(id){
        testApi.setChannelId(id);
        $state.go("app.video");
    }

};
})();

这是我获取通道数据的功能

function getChannels() {
        var deferred = $q.defer(),
            cacheKey = "leagues",
            ChannelsData = null;

        if (ChannelsData) {
            console.log("Found data inside cache", ChannelsData);
            deferred.resolve(ChannelsData);
            $window.alert("From Cache");
        } else {
            $http.get("http://example.com/api/videos/getchannels")
                .success(function(data) {
                    console.log("Received data via HTTP");
                    self.leaguesCache.put(cacheKey, data);
                    $window.alert("From HTTP");
                    deferred.resolve(data);
                })
                .error(function(dataerr) {
                    console.log("Error while making HTTP call.");
                    $window.alert("Error baba daram " + dataerr);
                    deferred.reject();
                });
        }
        return deferred.promise;
    }

当我用JSON.parse()发送数据时,它工作正常。

vm.channels = JSON.parse('[{"Name":"MyScreen News","ID":46,"Thumbnail":"CB46.jpg","Videos":null}]');

总的来说,我使用了由JSON发送数据的ASP.NET Web API。该应用程序在我们的桌面上运行良好,但运行的应用程序无法从我们的主机检索数据。而且,当我直接在程序中注入数据时,它可以在两个平台上工作。此外,离子配置文件如下所示:

  <content src="index.html"/>
  <access origin="*"/>
  <preference name="webviewbounce" value="false"/>
  <preference name="UIWebViewBounce" value="false"/>
  <preference name="DisallowOverscroll" value="true"/>
  <preference name="BackupWebStorage" value="none"/>
  <feature name="StatusBar">
    <param name="ios-package" value="CDVStatusBar" onload="true"/>
  </feature>

就这样。 ;)


3273
2018-05-22 06:32


起源

您是否尝试使用adb logcat在启动应用时看到错误? - carton
是的,我有,没有错误 - Nima
当然是一个愚蠢的问题,但你的物理设备上有互联网连接吗? (你称之为 example.com/api/videos/getchannels) - carton
是互联网在设备上没问题。 - Nima


答案:


如果您使用的是最新版本的cordova,则可能需要安装 cordova插件白名单

cordova plugin add cordova-plugin-whitelist

如果您使用的是IIS Express,可能会发现一些问题。
我已经详细解释了一些 这里


12
2018-05-22 08:43



正如我在config.xml <access origin =“*”/>中的详细代码中所解释的那样。 ? ( - Nima
没关系。你可能想读 这个。 - LeftyX
请将此标记为已解决,完全是溶剂。 - artdias90
@Nima你好尼玛,我知道它是一个旧的,但你设法修复这个问题?我正在经历一个类似的问题,非常感谢你的帮助。 - ComeRun
谢谢@LeftyX - abhi314


在测试服务器上工作时遇到完全相同的问题。看起来 iOS 9 通过不允许应用程序通过HTTP而不是HTTPS连接到服务器,为其应用程序添加了一层安全性。

要解决此问题,您必须添加 这个补丁 到你的info.plist iOS版本。

请记住,这个解决方案是 不安全 并且不应该用于生产Web服务。


2
2017-12-03 04:42





我遇到过同样的问题。如果您使用高于4.0的cordova,则必须运行 cordova plugin add cordova-plugin-whitelist

您可以通过运行检查您的cordova版本 cordova -v

快乐的编码。


0
2017-08-11 14:30



我安装了上面的插件,即使它没有通过,我的代码是$ http.get('118.67.249.142/CKC_NEW/c').then(function(response) {console.log(“Insert”)angular.forEach(response.data,function(res,key){var query =“INSERT OR REPLACE INTO adminshop1(shopid,url)VALUES(?,?)”; $ cordovaSQLite.execute (db,query,[res.shopid,res.url,res.shopname,res.Description,res.type])。then(function(res){if(response.data.length == key + 1){$ rootScope.selectAll();}},function(err){});})}); - Raghuram