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 が中止されたように見え、その後インターネット接続が再度確立されても、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 に答える