2013-07-21 50 views
0

目前,我不知道這是一個Dojo問題,瀏覽器問題,或兩者兼而有之。dojo jsonrest商店與週期性沒有互聯網連接

我有項的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()調用正在悄悄地將新項目添加到數據存儲中,當再次建立Internet連接時。

我沒有在Chrome中觀察到這種行爲。爲了在不同的瀏覽器上獲得統一的行爲,我想知道是否有辦法確保一旦POST被中止,它的存在和內存在Firefox中完全消失。

回答

0

我不知道爲什麼你有一個單獨的方法將商品添加到商店?

當您執行get on the Cache時,如果該項目不存在於memory store中,則請求將由JsonRest store進行,並且返回的項目將存儲在內存存儲中。應該不需要做一個單獨的xhr請求,事實上對緩存的query()調用總是通過JsonRest存儲,您需要重寫緩存查詢函數以使其首先檢查內存存儲。如果您只想添加到商店中,則放入或添加將滿足您的需求,並執行您的xhr博客所做的事情。

此外,如果您對JsonRest商店處理失敗請求的方式不滿意,只需擴展它並覆蓋它的get, query, add, remove or put函數,以您自己的方式處理請求響應。