2

我有一个小型 HTML5(使用 jQuery 移动)网络应用程序,它缓存其文件以离线使用它们,但是一旦离线,某些部分似乎无法工作。

文件缓存正常(我可以在 Web 检查器中看到它们),但是当我尝试访问使用 jQuery 加载 JSON 文件的页面时,它不会加载。

我尝试创建一个空函数来加载 JSON 文件(加载索引页面时),看看这是否有帮助,但似乎没有什么不同。

这是不想离线工作的功能。

我的问题是:它应该离线工作还是我错过了什么?

// events page listing start
 function listEvents(data){
 $.getJSON('/files/events.json', {type: "json"},function (data) {
        var output = '';
             for (i in data)
                {
                var headline = data[i].headline;
                var excerpt =  data[i].rawtext;
                output += '<div id="eventsList">';
                output += '<h3>'+headline+'</h3>';  
                output += '<p>'+ excerpt +'<p>';  
                output += '</div>';  
                }
            $("#eventsPageList").html(output).trigger("create");
        });
}
4

2 回答 2

1

我不确定,如果我是对的。但我认为当您离线时,ajax 请求总是会失败。它不会使用本地缓存的文件。您应该尝试的是,将数据缓存在 localStorage 中。当 ajax 请求失败时,回退到 localStorage。

于 2012-10-07T20:53:35.207 回答
0

好的,这是一个似乎可以工作的版本,我读取了 json 文件并将其放在 localstorage 中,然后在 listEvents 函数中使用 localstorage。

当页面加载时,我调用此函数将 json 添加到 localstorage

function  cacheJson(data){
        $.getJSON('/files/events.json',
              {type: "json", cache: true},function (data) {
             localStorage['events'] = JSON.stringify(data);   });
    }

然后这个函数将json(从localstorage)输出到页面,如果localstorage不包含json,则使用if else。

function listEvents(data){

    if (localStorage.getItem("events") === null) { 
        var output = '';
        output += 'Sorry we have an error';  
        $("#eventsPageList").html(output).trigger("create");
     }
     else {
    data = JSON.parse(localStorage['events']);
      var output = '';
         for (i in data)
            {
            var headline = data[i].headline;
            var excerpt =  data[i].rawtext;
            output += '<div id="eventsList">';
            output += '<h3>'+headline+'</h3>';  
            output += '<p>'+ excerpt +'<p>';  
            output += '</div>';  
            }
        $("#eventsPageList").html(output).trigger("create");
   }
}

它似乎工作正常,但我错过了可能导致问题的东西吗?

有没有更有效的方法来做到这一点?

于 2012-10-12T13:04:36.330 回答