目前我不知道这是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中完全被删除。
答案 0 :(得分:0)
我不确定为什么你有一个单独的方法来向商店添加商品?
当您执行get on the Cache时,如果memory store中的项目不存在,则JsonRest store会发出请求,并且返回的项目将存储在内存存储中。应该不需要单独执行xhr请求,对缓存的infact query()调用总是通过JsonRest存储,您需要覆盖缓存查询函数以使其首先检查内存存储。如果您只是想添加到商店,那么put或add会满足您的需求,并执行您的xhr帖子正在做的事情。
此外,如果您对JsonRest存储处理失败请求的方式不满意,只需扩展它并覆盖其get, query, add, remove or put函数,以您自己的方式处理请求响应。