【问题标题】:How to cache the result of $.post-request in jQuery?如何在 jQuery 中缓存 $.post-request 的结果?
【发布时间】:2011-01-01 00:56:10
【问题描述】:

我有一个小的 jQuery 脚本,它通过查看 ID 来获取信息。

防止多次请求相同数据的最佳方法是什么(例如,在 jQuery 中缓存的最佳做法是什么)?

我已尝试使用 $.post$.ajax 并将选项“缓存”设置为 true,但请求被多次发送。

保存收集的数据并使用集合来查看您是否必须请求它会更好吗?

欢迎任何想法和建议!

如果重要,我会在服务器端使用 ASP.Net MVC。

【问题讨论】:

  • 你的 jQuery 脚本如何决定请求什么?
  • 如果用户在某个项目上单击“详细信息”,则会发出请求(我希望每个项目最多进行一次)。

标签: javascript jquery asp.net-mvc ajax caching


【解决方案1】:

您在文档中看到的cache 选项指的是浏览器的缓存。

您可以通过多种方式实现自记忆函数的模式,目标是确定参数(在您的情况下为id)的函数结果只计算一次。

由于您使用的是 Ajax 请求,我建议您也使用回调参数,例如:

var getInfo = (function () {
  var cache = {}; // results will be cached in this object

  return function (id, callback) {
    if (cache[id] != null) { // if exist on cache
      callback(cache[id]);
      return;
    }
    // doesn't exists on cache, make Ajax request and cache it
    $.post("info.url", { "id": id }, function (data) { 
      cache[id] = data; // store the returned data
      callback(data);
    });
  };
})();

示例用法:

getInfo(5, function (data) {
  alert(data);
});

【讨论】:

  • 打败我...我应该停止写长答案或写得更快:) 你希望在函数之外声明缓存变量。里面不会很有帮助。
  • 谢谢@Ariel,实际上cache变量在返回的函数之外,它可以通过自执行函数创建的闭包来访问。
  • 这是用于记忆的 Javascript(闭包)的最佳特性之一的一个很好的例子。您肯定希望将缓存对象保留在闭包中,以防止它泄漏到全局范围的那个可怕的污水池中。
  • 5有什么用?在 getInfo 中?
  • @CMS 我觉得这很有用,但我能问一下回调是什么吗?我的函数会处理结果数据吗?非常感谢
猜你喜欢
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
相关资源
最近更新 更多