2013-03-20 51 views
0

我想通过使用localStorage来实现从服务器数据检索“缓存”。请求参数(requestData)将成为唯一标识符。这里是我的代码:保存javasctipt中的ajax调用之间的状态

App = {}; 
App.Service = function(name) { 
    this.name = name; 
}; 
App.Service.prototype.sendRequest = function(requestData) { 
    // process request data somehow and store to local variable 
    var identifier = $.param(requestData); 

    $.ajax({ 
     url: 'web/api', 
     success: function(data) { 
      // can identifier differ from calculated before ajax call? 
      // for example if someone else start this method in the same time? 
      localStorage.setItem(identifier, data); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      // handle error 
     }, 
     type: "POST", 
     data: requestData 
    }); 
}; 

这里是我的问题:假设我已经多次启动sendRequest方法。每个success回拨方法是否都在自己的identifier上操作,否则它们会混合(换句话说错误的标识符将被分配给响应数据)?

+1

你不需要担心Ajax调用之间的数据混乱,因为每个sendRequest()调用都会创建自己的本地'标识符'变量,这个变量绑定到成功/错误回调函数的闭包。 – accme 2013-03-20 20:15:22

+0

谢谢。我不知道(我甚至没有想过),每个函数的调用创建它自己的地址空间:( – 2013-03-20 20:35:10

回答

0

您是否考虑过简单地创建一个数组,并将其称为var cache = [],并在每次检索后将响应数据添加到该数组中?只需使用一些变量来跟踪您使用的最后一个索引,或者如果您想跟踪请求的发生时间,则使用日期/时间,与任何响应数据分开。

+0

想法是通过请求参数(或参数组合)区分缓存中的项。 – 2013-03-20 20:05:34

+0

也许我描述的问题并不十分清楚,但我对回调函数在使用本地数据时的行为很感兴趣,他们都会在彼此之间共享一个字段还是在自己的副本上运行? – 2013-03-20 20:08:56

+1

标识符不应该更改如果你的函数被称为提供给'success'属性的回调函数,如果你试图手动调用回调函数,那么在收到响应之前可能会遇到回调触发问题,除此之外,发送的数据在返回时本质上是“外来的”,这意味着它与页面上的任何内容无关,并且必须从解析后的响应中提取出来,就像任何其他数据一样ULD。 – 2013-03-20 20:14:55