dojo jsonrest商店,期间没有互联网连接

时间:2013-07-21 20:44:48

标签: google-chrome firefox dojo

目前我不知道这是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已中止,无论后来再次建立互联网连接,POST中的延迟对象似乎都会被丢弃,新项目永远不会添加到数据存储区。

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

store.query({...})

然后将POST中止的新项目添加到商店。就好像在再次建立Internet连接时,query()调用正在静默地将新项添加到数据存储区。

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

1 个答案:

答案 0 :(得分:0)

我不确定为什么你有一个单独的方法来向商店添加商品?

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

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