ios - 在 Cordova/ionic/Angular 中使用本地 json 文件。在浏览器中有效,但在设备上无效?

标签 ios json angularjs cordova ionic-framework

我正在尝试使用 data.json 文件中的 JSON 对象作为我正在处理的快速原型(prototype)的数据集。它位于 my_project/www/data/ 目录中。我有一个 Angular 服务,它使用 $http 获取此文件中的数据,对其执行一些操作,然后在我的整个应用程序中使用它。

我正在使用 Cordova 和 Ionic。在我的计算机上使用 ionic serve 时,浏览器中的一切看起来都很完美。但是,当使用 ionic view ( http://view.ionic.io/ ) 并在我的 iPad 上打开应用程序时,我看到:

{"data":null,"status":0,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"url":"../data/items.json","headers":{"Accept":"application/json,test/plain,*/*}},"statusText":""}

回应。我认为如果它是一个相对 URL 问题,它也不会在浏览器中工作,但事实并非如此。

这是我正在做的:

config.xml 有这一行:

<access origin="*" subdomains="true"/>

我执行简单请求的服务正在做:

return $http.get("../data/data.json").then(function (response) {
    return response.data;
});

最后,在我的 Controller 中,我要求服务执行请求:

 myService.goGetData().then(onComplete, onError);

在我的浏览器中,onComplete() 被调用,而在 iPad 上,onError() 被调用。 有什么指导吗?

最佳答案

在您的本地开发机器上,当您运行 ionic serve 时,您实际上正在运行一个网络服务器。所以像 ../../data.json 这样的路径会起作用,因为它在具有完整文件系统访问权限的网络服务器的上下文中是完全有效的。

但是,如果您尝试在您的设备上做同样的事情,您可能会遇到问题,因为该设备的安全策略不允许 ajax 向上遍历根之外。它不是一个动态网络服务器,所以它不能在树上加载文件。相反,你会使用类似 cordova file plugin 的东西从文件系统中获取文件内容。如果您愿意,可以使用 ngCordova使与插件的交互不那么痛苦。

我 99% 确定这就是正在发生的事情,但您可以通过将 $http 调用指向托管在公共(public)服务器上的一些虚拟 .json 数据来测试我的理论,看看它是否有效。 Here是一些虚拟的 json 数据。

关于ios - 在 Cordova/ionic/Angular 中使用本地 json 文件。在浏览器中有效,但在设备上无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30244312/

相关文章:

ios - AWS S3 上传 - 使用 AccessKey、SecretKey 和 SessionToken - iOS SDK

c# - Newtonsoft.Json 是否转义所有字符?

c# - 初始化 applicationhost.config 文件失败。找不到 IIS Express

javascript - 将数据从一页传输到下一页

ios - 字典给出不正确的值

ios - 将文本字段添加到 UITableview 单元格

ios - 使用 Swift 从 Parse 表中查询昨天的记录

json - Typescript with TypeLite - 运行时类型检查

php - 从steamapi(json)抓取数据并将其导入到mysql

javascript - 与对象 angularjs 组件绑定(bind)的一种方式