Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQuery中缓存$.post请求的结果?_Javascript_Jquery_Asp.net Mvc_Ajax_Caching - Fatal编程技术网

Javascript 如何在jQuery中缓存$.post请求的结果?

Javascript 如何在jQuery中缓存$.post请求的结果?,javascript,jquery,asp.net-mvc,ajax,caching,Javascript,Jquery,Asp.net Mvc,Ajax,Caching,我有一个小jQuery脚本,它通过查看ID来获取信息 防止多次请求相同数据的最佳方法是什么(例如,jQuery中缓存的最佳实践是什么) 我尝试使用$.post和$.ajax,并将选项“cache”设置为true,但请求被发送了不止一次 保存收集的数据并使用集合来查看是否需要请求它是否更好 欢迎提出任何意见和建议 如果有必要,我在服务器端使用ASP.Net MVC。您在文档中看到的缓存选项指的是浏览器的缓存 您可以通过多种方式实现自记忆函数的模式,目标是只计算一次已确定参数(id)的函数结果 由于

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

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

我尝试使用
$.post
$.ajax
,并将选项“cache”设置为true,但请求被发送了不止一次

保存收集的数据并使用集合来查看是否需要请求它是否更好

欢迎提出任何意见和建议


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

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

您可以通过多种方式实现自记忆函数的模式,目标是只计算一次已确定参数(
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);
});

您的jQuery脚本如何决定请求什么?如果用户单击某个项目上的“详细信息”,将发出请求(我希望每个项目最多只能发出一次请求)。请告诉我。。。我应该停止写长答案或写得更快:)您可能希望在函数外部声明缓存变量。在内部它不会有太大帮助。感谢@Ariel,实际上
缓存
变量在返回的函数之外,可以通过自执行函数创建的闭包访问它。这是一个用于记忆的Javascript(闭包)最佳功能之一的很好例子。你肯定想把缓存对象保存在一个闭包中,以防止它泄漏到全局作用域的可怕污水池中。5有什么用?在getInfo?@CMS中,我发现这很有用,但我可以问一下回调是什么吗?是我的函数负责处理结果数据吗?谢谢