0

目前我不知道这是 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 中完全消失。

4

1 回答 1

0

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

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

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

于 2013-07-21T21:44:01.887 回答