0

我通过点击事件在 ajax 中加载了一个带有子类别列表的弹出菜单。

例如:有 10 个主要类别,每个类别都有许多子类别列表,并通过 ajax 在弹出窗口中加载。当我单击类别 A 时,它会加载类别 A 的子类别,当我移至类别 B 时,它会加载类别 B 的子类别,当我返回并再次单击类别 A 时,请求再次进入服务器并需要相同的时间来加载。

我需要从缓存中加载这些数据。当我cache: true再次设置 ajax 函数时,它仍然加载并发送请求。

我不需要再次向服务器请求相同的数据,即。A类。有没有办法做到这一点?

如果由于没有互联网连接而失败,是否可以再次重新请求服务器?

代码:

$.ajax({
   url:'/category/list/',
   data:'catid='+$(".category").attr('data-id'),
   cache: true,
   dataType:'json',
   beforeSend:function()
   {
    $(".subcatlist").html('<div class="loader">loading...</div>');
   }
   success:function(json){
     $(".loader").remove();
     $(".subcatlist").html(json.sublist);
   }
   error:function()
   {
     console.log('error');
   }

});
4

2 回答 2

2

在接收 Ajax 调用的 php 脚本的最顶部尝试类似的操作:

header("Cache-Control: maxage=".date(DATE_RFC822,strtotime("+2 day"));
header("Pragma: private");
header("Expires: " . date(DATE_RFC822,strtotime("+2 day")));

这应该告诉浏览器 Ajax 调用的结果可以缓存两天。

于 2013-09-30T17:25:15.083 回答
0

我在我的脚本文件顶部使用它,例如:function.js / default.js / admin.js,或<script type="text/javascript">标签之后。

$.ajaxSetup ({
    // Enable caching of AJAX responses
    cache: true
});
于 2013-09-30T16:48:21.030 回答