だから私はこれが私が答えている本当に古い投稿(4年!)であることを認識しています。しかし、振り返ってみると明らかであるはずの答えをグーグルで検索したときに見つけましたが、ここでは答えられていません(また、私が見た他の場所でもありません)。だから、次の貧しいシュラブのために:
(私のように)ファイル転送を実際に停止することは気にせず、単にdojo.io.iframe
MOVE ON を有効にしたい場合 (ユーザーの観点から効果的にキャンセルする場合) は、延期されたコールバックの結果を単純に無視できます。ただし、 を介して追加のものをアップロードしたい場合はdojo.io.iframe
、これdojo.io.iframe
も結果を無視するようにする必要があります。これを行うには、面倒な単純なことです...dojo.io.iframe.send()
呼び出しは deferred を返します。が後続のキューに入れられた send 呼び出しを実行するようにアップロードをキャンセルしたい場合(一度に 1 つしか実行できないため)、現在進行中の送信から戻ってきた deferred でdojo.io.iframe
a を呼び出すだけで済みます。.cancel()
次のように:
var dfd = dojo.io.iframe.send({...});
var dfd2 = dojo.io.iframe.send({...}); // this send will not start until the first one completes. it is blocked internally by dojo.io.iframe.
...
ここで、アップロードに時間がかかりすぎているか、選択したファイルをアップロードするつもりがないことに気付いたために、ユーザーはどこかでキャンセル ボタンをクリックします。最初のファイル送信が完了するまで待ちたくありません。その送信結果はもう気にしないからです。
onclick: function() {
dfd.cancel();
}
dfd でキャンセルを呼び出すと、2 番目のsend()
呼び出しをすぐに実行できます。フィドラーで見ると、最初の (キャンセルされた) アップロードが完了するのを待つのではなく、2 番目のアップロードがすぐに開始されることがわかります.cancel()
。
最初の保留をキャンセルせずdojo.io.iframe
に、 は最初のアップロードの結果を忠実に待ち続けます。これにより、 をsend()
介して処理されるのを待っている後続のキューに入れられたコールがブロックされますdojo.io.iframe
。