【问题标题】:Save state between ajax calls in javasctipt在 javascript 中保存 ajax 调用之间的状态
【发布时间】:2013-03-21 04:01:37
【问题描述】:

我想使用localStorage 实现从服务器数据中检索的“缓存”。请求参数 (requestData) 将是唯一标识符。这是我的代码:

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 上运行还是它们会混合在一起(换句话说,错误的标识符将分配给响应数据)?

【问题讨论】:

  • 您无需担心 ajax 调用之间的数据混乱,因为每个 sendRequest() 调用都会创建自己的本地“标识符”变量,该变量与成功/错误回调函数的闭包相关。
  • 谢谢。我不知道(我什至没有想过)每个函数的调用都会创建它自己的地址空间:(

标签: javascript jquery ajax local-storage


【解决方案1】:

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

【讨论】:

  • 这个想法是通过请求参数(或参数组合)来区分缓存中的项目。
  • 也许我描述的问题不太清楚,但我对回调函数在本地数据上操作时的行为很感兴趣。他们会在彼此之间共享一个字段还是在自己的副本上进行操作?
  • 如果您的函数作为提供给success 属性的回调调用,则标识符不应更改。如果您尝试手动调用回调,则可能在收到响应之前触发回调有问题。除此之外,发送的数据在返回时基本上是“外来的”。我的意思是它与您页面上的任何内容都没有关系,并且必须像任何其他数据一样从您解析的响应中提取。
  • 是否表示成功回调函数中的标识符不会引用sendRequest方法中的标识符(何时调用成功)?
  • 收到响应后,您应该在回调中处理响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2014-06-30
  • 2012-05-31
相关资源
最近更新 更多