【发布时间】:2016-01-06 14:01:07
【问题描述】:
对于我的 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/。
【问题讨论】:
-
我认为您可能有错误的相对路径。也许你升级了太多级别,浏览器版本到达根文件夹并忽略了
..,但 phonegap 应用程序升级得太远了。可能您应该使用'/lang/'作为路径。 -
我试过了,但没有成功。我的控制器 JS 在应用程序的这个文件夹中:'file:///data/data/com.adobe.phonegap.app/files/phonegapdevapp/www/js/controller/' 所以我认为路径可能没问题跨度>
标签: javascript android angularjs cordova phonegap-plugins