2015-04-06 67 views
0

使用jQuery 1或2的最后一个版本,我有这个简单的代码,使一个请求,并显示结果:如何使用jQuery读取缓存的json数据?

var url1 = "cache/1"; 

var callback1 = function(data, statusText, response){ 
    $("#result1").html("status :"+response.status); 
    $("#result1").append("<p>"+JSON.stringify(data)+"</p>"); 
}; 

$(function() { 

    $("#query1").on ("click", function(){ 
     $.ajax({ 
      url: url1, 
      cache: true, 
      dataType: 'json', 
      ifModified: true, 
      success:callback1 
     }); 
    }); 
}); 

第一个请求,我看我的JSON数据。在第二个请求中,我有一个304响应,如预期,数据未定义。

如何显示浏览器缓存中的数据?

+1

您应该在'data'中获得与第一次相同的值。检查开发人员工具的“网络”选项卡,以确保您所做的请求实际上是一个if-modified以来的请求。 – Quentin 2015-04-06 08:48:16

+0

其实这是一个If-None-Match,它在我直接使用url获取URL时可以工作 – 2015-04-06 08:55:16

+0

这应该是完全透明的。在304之后运行的成功回调中获得完全相同的数据对象。 – Tomalak 2015-04-06 11:05:41

回答

1

ifModified

文档ifModified(默认:false)
类型:Boolean
只允许自上次请求的响应已经改变了请求是成功的。

说这一切,我猜。不要使用它,它不会做你的想法。

$(function() { 
    $("#query1").on("click", function(){ 
     $.get("cache/1").done(function (data, statusText, response) { 
      $("#result1") 
       .html("status :"+response.status); 
       .append("<p>"+JSON.stringify(data)+"</p>"); 
     }); 
    }); 
}); 

不要试图引导客户端缓存。这是服务器的任务。设置适当的缓存标题,客户端将自行工作。

+0

使用if-modified-since以后,您可以使用cache = true或者根据需要将其删除。 – 2015-04-06 19:02:14