Angular$http.get()在Phonegap DevApp中不起作用

Angular $http.get() does not work in Phonegap DevApp

本文关键字:Phonegap DevApp 不起作用 http get Angular      更新时间:2023-09-26

对于我的Phonegap应用程序,我正在尝试使用angulars$http加载一个JSON文件。

我得到了这项服务:

cApp.factory('language', function ($http) {
    return {
        getLanguageData: function () {
            return $http.get('../../lang/' + lang.substr(0,2) + '.json');
        }
    }
});

我在这个控制器中使用的:

cApp.controller('initController', function ($scope, language) {   
    language.getLanguageData().success(function (data) {        
        $scope.language = data;
    }).catch(function (e) {
        alert("error" + e);
    });
});

这在我的浏览器中运行良好,但在Android上的Phonegap Developerapp中则不然。控制器不写入language变量,也不会发出任何警报(甚至不会发出"错误")。

我尝试了什么:

使用.catch().then().catch()链,它返回的数据是最后一个.catch()中的null

我不知道这是否是一个跨来源的问题,但我的phonegap白名单允许所有域(<access origin="*" />)。

无论如何,这些文件应该在同一个域中,因为我的文件夹结构如下:

.myapp
├── www
|   ├── js
|   |   ├── controller
|   |   |   └── initController.js
|   |   └── service
|   |       └── language.js
|   └── lang
|       ├── en.json
|       └── de.json
└── config.xml

我做错了什么,失踪了?

更新:找到部分解决方案:

如果我使用整个路径执行get(),它就会工作:

return $http.get('file:///data/data/com.adobe.phonegap.app/files/phonegapdevapp/www/json/lang/' + lang.substr(0,2) + '.json');

这不是一个合适的解决方案,因为它在iOS上不起作用(路径不同)。我不明白为什么我不能使用../../lang/

您应该使用cordova应用程序的文件api将其作为文件处理。