2012-04-20 43 views
0

当使用amplify.request时,我想使用amplify.store来坚持每次调用的结果。我知道我可以用这个代码做到这一点:如何控制amplify.request缓存:持久选项

amplify.request.define("ajaxExample2", "ajax", { 
    url: "/myApiUrl", 
    dataType: "json", 
    type: "GET", 
    cache: "persist" 
}); 

不过,我希望能够这样做的结果添加到存储与amplify.store另一个变量,但只有当数据来自服务器和而不是来自缓存。

例如,我将首先打电话给amplify.request("ajaxExample2"...,然后通过amplify.store将结果保存到另一个变量。然后,下次我打电话给amplify.request("ajaxExample2"...时,如果数据来自服务器,我想覆盖我的本地变量 - 如果没有,我想让它保持独立。

所以,我想知道请求是否进行服务器调用,如果有,请调用函数。有没有办法做到这一点放大?

回答

0

@swatkins在调用服务之前,您可以检查商店是否有数据(如果数据在商店中可用)(缓存),则无需调用服务,否则调用服务。

为前:

var cachedData = amplify.store("anyKey"); 
    if (typeof cachedData === 'undefined' || cachedData.length == 0) { 

     amplify.request.define("ajaxExample2", "ajax", { 
      url: "/myApiUrl", 
      dataType: "json", 
      type: "GET", 
      cache: "persist" 
     }); 

amplify.request("ajaxExample2", 
       function(data) {  
        cachedData = data.d; 
        amplify.store("anyKey", data) 
       }); 
} 
+0

这回答我的问题(因为我写了它),所以我打上你的答案被接受。不过,我应该注意到我想在1分钟后过期缓存。我正在寻找一种方法来确定放大请求是否在整个页面加载的不同时间从缓存或服务器获取数据 - 而不仅仅是初始加载。 – swatkins 2012-06-20 15:09:37