【问题标题】:dojo jsonrest store with periods of no internet connectivitydojo jsonrest 商店,有一段时间没有互联网连接
【发布时间】:2013-07-21 20:44:47
【问题描述】:

目前我不知道这是 Dojo 问题、浏览器问题还是两者兼而有之。

我有一个项目的 dojo.store.JsonRest 数据存储:

            //Create stores
            var json = new JsonRest(options);

            //Memory store
            var memory = Observable(new Memory({}));

            //Observable cache
            var cache = new Cache(json, memory);

物品的商店可能会同时与不同的用户共享,因此商店会通过发布以下内容定期更新:

store.query({..})

当我想添加一个新项目时,我使用

dojo.xhr('POST',{
  url:...,
  postData:...,
  handleAs:'json',
  headers:{...},
  failOk:true,
  timeout:15*1000
});

这很好用。但是,我想优雅地处理在失去互联网连接期间发帖的情况。特别是,我不希望商店在再次建立连接时自动尝试再次发布;我希望用户手动重试。

在 Chrome 中,POST 似乎已中止,并且无论随后再次建立 Internet 连接,POST 中的延迟对象似乎都被丢弃了,并且新项目永远不会添加到数据存储中。

在 Firefox 中,POST 似乎已中止。但是当刷新数据存储时,例如通过调用:

store.query({...})

POST 被中止的新项目然后被添加到存储中。当再次建立互联网连接时,就好像 query() 调用正在悄悄地将新项目添加到数据存储中。

我没有在 Chrome 中观察到这种行为。为了在不同的浏览器中获得统一的行为,我想知道是否有办法确保一旦 POST 被中止,它的存在和内存在 Firefox 中完全消失。

【问题讨论】:

    标签: google-chrome firefox dojo


    【解决方案1】:

    我不知道为什么你有一个单独的方法来添加一个项目到商店?

    当您执行get on the Cache 时,如果memory store 中不存在该项目,则JsonRest store 发出请求并将返回的项目存储在内存存储中。应该不需要做一个单独的 xhr 请求,事实上对缓存的 query() 调用总是通过 JsonRest 存储,您需要覆盖缓存查询函数以使其首先检查内存存储。如果您只想添加到商店,那么 put 或 add 将满足您的需求,并执行您的 xhr 帖子正在执行的操作。

    此外,如果您对 JsonRest 存储处理失败请求的方式不满意,只需扩展它并覆盖其 get, query, add, remove or put 函数,以您自己的方式处理请求响应。

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 2014-03-07
      • 2019-12-17
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2021-06-01
      相关资源
      最近更新 更多