4

サーバーにファイルを送信するために dojo.io.iframe.send メソッドを使用しています。送信に時間がかかりすぎる場合や、ユーザーが間違ったファイルを送信したことに気付いた場合に備えて、ユーザーが送信中に送信をキャンセルできる方法を提供したいと考えています。

これを行う方法がわかりません。送信に時間がかかる場合 (つまり、サーバーがすぐに応答しない場合) は、タイムアウトを使用して送信を終了できますが、それは私が望んでいることではありません。ユーザーがジェスチャーを行うたびに終了したい(「キャンセル」ボタンをクリックするなど)。

ありがとう!

4

4 に答える 4

3

こんにちは、これは返信がかなり遅れていることを認識しています。あなたや Google でここにたどり着いた人がこれを利用できることを願っています。

iFrame でファイルのアップロードをキャンセルすることができwindow.stop()ます。Firefox では、iFrame でメソッドを呼び出すことができます。ただし、IEにはこのメソッドはありませんがexecCommand("Stop")、手動で停止を押しても機能しないため、スクリプトによる停止も機能しないため、付属しています。

私の最初の試みは、about:blank悲しいことに iFrame の場所を無駄に設定することでした。ただし、本文のあるソースを参照すると、iFrame POSTがキャンセルされます。

于 2009-02-03T11:42:15.793 に答える
3

セキュリティ上の理由から、JavaScript は送信しているファイルにアクセスすることさえできません。すべてのファイルのアップロードはフォームを使用して行われ、ブラウザーによって直接処理されます。私の知る限りでは、アップロードの進行状況を監視するための直接的なインターフェースや、アップロードに影響を与える方法 (キャンセルなど) はありません。

別の場所に移動すると役立つ場合がありますが、転送を中断するかどうかはブラウザー次第です。そのための仕様はありません。

要約すると、ポータブルな方法で JavaScript で信頼できるものにすることはできません。つまり、Dojo はこの機能を提供していません。

于 2008-11-24T05:03:15.073 に答える
2

だから私はこれが私が答えている本当に古い投稿(4年!)であることを認識しています。しかし、振り返ってみると明らかであるはずの答えをグーグルで検索したときに見つけましたが、ここでは答えられていません(また、私が見た他の場所でもありません)。だから、次の貧しいシュラブのために:

(私のように)ファイル転送を実際に停止することは気にせず、単にdojo.io.iframeMOVE ON を有効にしたい場合 (ユーザーの観点から効果的にキャンセルする場合) は、延期されたコールバックの結果を単純に無視できます。ただし、 を介して追加のものをアップロードしたい場合はdojo.io.iframe、これdojo.io.iframeも結果を無視するようにする必要があります。これを行うには、面倒な単純なことです...dojo.io.iframe.send()呼び出しは deferred を返します。が後続のキューに入れられた send 呼び出しを実行するようにアップロードをキャンセルしたい場合(一度に 1 つしか実行できないため)、現在進行中の送信から戻ってきた deferred でdojo.io.iframea を呼び出すだけで済みます。.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

于 2012-03-23T15:55:21.377 に答える
0

友人がしたことは、キャンセルボタンがpreseedされたときにWebページをリロードすることでした(document.location.refresh関数を呼び出すことで考えます)。アップロードの進行状況を監視する方法もあります(進行状況バーがあります)が、サーバーに依存します(私が見た場合、それはapacheモジュールであり、指定されたリンクとサーバーで進行状況をポーリングします進行状況を返します)。

于 2009-08-17T05:26:45.280 に答える