起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1996|回复: 5

[处理中3] 关于$.getJSON 加载手机下载的本地json文件

[复制链接]

20

主题

72

帖子

492

积分

中级会员

Rank: 3Rank: 3

积分
492
QQ
发表于 2017-12-8 17:21:16 | 显示全部楼层 |阅读模式
为了减轻服务端的压力,我想把部分不经常更新的数据,让用户下载到手机本地
每次加载的时候,在本地目录查找这个json文件,
如果有就直接加载,
如果没有 (例如被用户清理垃圾弄丢了),再去服务端重新下载
测试 ,这个  $.getJSON 貌似无法加载下载的Json文件

代码如下:

Model.prototype.data1CustomRefresh = function(event){
        var data1 = this.comp("data1");
        var url = "http://www.baidu.com/1234.json";    ////远程地址
        var localUrl = cordova.file.cacheDirectory + '1234.json';   ////下载到本地的路径
        var resolveLocalFileSystemURL = window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL;
                        resolveLocalFileSystemURL(localUrl,
                                        function (dirEntry) {         /////文件存在,直接加载
                                                $.ajaxSettings.async = false;
                                                $.ajaxSettings.global = false;
                                                $.getJSON(localUrl, function(data){      ////测试在这一步没执行,貌似$.getJSON 无法打开上面目录的文件
                                                        data1.loadData(data);
                                                });
                                        },
                                         function (err) {         /////文件不存在,先下载后再加载
                                                        var fileTransfer = new FileTransfer();
                                                                fileTransfer.download(    //调用对象的下载方法,开始下载
                                                                                url,
                                                                                localUrl,
                                                                                function(entry) {
                                                                                        $.ajaxSettings.async = false;
                                                                                        $.ajaxSettings.global = false;
                                                                                        $.getJSON(localUrl, function(data){                     ////测试在这一步没执行,貌似$.getJSON 无法打开上面目录的文件
                                                                                                data1.loadData(data);
                                                                                        });
                                                                                },
                                                                                function(error) {  //出错回调函数
                                                                                },
                                                                                false,
                                                                                {   }
                                                                );
                                                }
                        );




求教,谢谢

20

主题

72

帖子

492

积分

中级会员

Rank: 3Rank: 3

积分
492
QQ
 楼主| 发表于 2017-12-8 17:33:22 | 显示全部楼层
如果去掉
$.ajaxSettings.global = false;
则会出现跨域的错误。
回复 支持 反对

使用道具 举报

发表于 2017-12-8 19:12:15 | 显示全部楼层
不用通过本地cordova.file.cacheDirectory + '1234.json 获取很多json文件的!

只要版本号没变! json文件默认就会优先访问本地的!
比如打包仿途牛!模式1资源打包在APP中!计算服务器没有资源也可以访问的!   
因为默认就会优先走浏览器缓存!这个你不需要特殊处理的!就参考仿途牛代码加载json文件的代码就行的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

20

主题

72

帖子

492

积分

中级会员

Rank: 3Rank: 3

积分
492
QQ
 楼主| 发表于 2017-12-8 21:46:57 | 显示全部楼层
liangyongfei 发表于 2017-12-8 19:12
不用通过本地cordova.file.cacheDirectory + '1234.json 获取很多json文件的!

只要版本号没变! json文件 ...

感谢,
您说的解决方法是采用wex5部署的方法

我的后端服务是自己做的,没有采用wex5的部署
正因为如此,才想让客户把常用的json下载到本地

但是又不能全部打包到app中
因为这些文件,有可能每天都增加json文件
一旦新增,就基本不用改

所以客户端只要发现新增,就去把这个新json下载,以后就本地加载就行
回复 支持 反对

使用道具 举报

20

主题

72

帖子

492

积分

中级会员

Rank: 3Rank: 3

积分
492
QQ
 楼主| 发表于 2017-12-8 23:25:37 | 显示全部楼层
我的临时解决办法,,是将下载的json,存入了 localStorage;
能解决我的需要;

但是, localStorage 有存储上限,当数据多的时候,有溢出问题

还望能有办法,把json当文件,直接存放本地,方便读取
求教
回复 支持 反对

使用道具 举报

发表于 2017-12-11 09:46:49 | 显示全部楼层
jijiuc 发表于 2017-12-8 23:25
我的临时解决办法,,是将下载的json,存入了 localStorage;
能解决我的需要;

直接部署到服务器上就可以的! 访问或一次以后,就会默认作为浏览器的缓存!缓存起来的!下次就会优先访问本地缓存!根本不需要专门存储json文件!

就算你后端是自己做的!只要json的url地址不变!就会默认缓存的!  如果url地址变了,那就是本地没有!只能访问服务器了!

这是浏览器的缓存能力!而不是wex5特殊实现的!

而且后台也可以单独配置文件的缓存时间等!你具体上网搜下吧!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-6-28 11:39 , Processed in 0.059956 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表