【问题标题】:Angular & Ionic, HTTP Get not working in real device IOSAngular和Ionic,HTTP Get在真实设备IOS中不起作用
【发布时间】:2015-05-22 06:32:07
【问题描述】:

我的应用程序有问题,当我在本地主机上运行该应用程序时,它可以正常工作,并且我可以看到频道列表,但是当我尝试通过物理设备测试该应用程序时,它没有显示任何内容。我认为问题出在我用来通过 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>

就是这样。 ;)

【问题讨论】:

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

标签: angularjs ionic-framework ionic


【解决方案1】:

如果您使用的是最新版本的 cordova 之一,您可能需要安装 cordova plugin whitelist

cordova plugin add cordova-plugin-whitelist

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

【讨论】:

  • 正如我在 config.xml 中的详细代码中解释的那样,我已经有了。 ? ;(
  • 没关系。您可能想阅读this
  • 请将此标记为已解决,这正是解决方案。
  • @Nima 你好 Nima,我知道它是旧的,但你设法解决了这个问题吗?我遇到了类似的问题,非常感谢您的帮助。
  • @LeftyX 我也面临同样的问题我也阅读了 yoy 提供的链接以供参考,但它仍然进行了更改,但它仍然无法正常工作。我的问题在这里stackoverflow.com/questions/39451383/…
【解决方案2】:

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

要解决此问题,您必须将 This Patch 添加到您的 info.plist iOS 版本中。

请记住,此解决方案不安全,不应在生产网络服务中使用。

【讨论】:

    【解决方案3】:

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

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

    快乐编码。

    【讨论】:

    • 我已经安装了上面的插件,即使它没有通过,我的代码是 $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) {}) ; }) });
    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    相关资源
    最近更新 更多