3

重複送信を防止しようとしているフォームのページがありますが、これはかなり簡単です(誰かが興味を持った場合に備えて、これを使用しました)

$("form").submit(function()
{
    setTimeout(function()
    {
        $("input").attr("disabled", "disabled");
    }, 50);
});

...このページから盗んだものですが、正常に動作します。予想どおり、入力はすぐに無効になり、フォームは期待どおりに送信され、ユーザーはリダイレクトされます。

私の問題は次のとおりです。ユーザーがページ内ナビゲーションの代わりに[戻る]ボタンを使用することがあると予想されるため、[戻る]ボタンをクリックしてもページが機能するようにしたいと思います。ただし、投稿が成功した後で[戻る]ボタンをクリックすると、すべての入力が無効になっている前のページに戻ります(ご存知かもしれませんが)。必要に応じて、[戻る]ボタンをクリックした後、ページを使用できるようにしてください。

最初にヘッダー/メタタグを使用してページをキャッシュしないようにブラウザに指示しようとしましたが、それは機能しませんでした(Firefox 3.6.8では)-それから、おそらくそうしないので、とにかくそれをしたくないと決めましたクロスブラウザ互換ではなく、とにかくベストプラクティスではない可能性があります(これそのようなケースの1つです)。私が見たいくつかのアプリケーションのように[戻る]ボタンを「壊す」ものは使いたくありません(たとえば、ユーザーがクリックしてもページに戻らず、強制的にそのページにとどまるようにします)。 )、これは私には悪い考えのように思えます。ユーザーが[戻る]ボタンをクリックしたときにページを役に立たなくすることなく、クライアント側でフォームの重複送信を防ぐ方法を知っている人はいますか?(問題が発生した場合は、ASP.NET MVC 1を使用しています)。

4

2 に答える 2

0

まあ、他の誰かがより良いアイデアを考えて投稿したようには聞こえません。私たち自身のStackOverflowが(少なくともAsk Questionページで)同じ動作をしていて、送信ボタンを無効にしていることに気づきました。「戻る」をクリックしても、ボタンはまだ無効になっています。たぶん私ができる最善のことは、ボタンを無効のままにして、ページを手動で更新するように強制するか、可能であれば[戻る]ボタンの代わりにサイトナビゲーションを使用するように勧めることです。

しかし、他の誰かがもっと良いアイデアを持っているなら、私はまだ彼らにオープンです。

于 2010-08-18T13:53:03.160 に答える
0

すべてのフォームに固有のランダムキーを作成して、送信されたらそのキーをデータベースに挿入し、そのキーがデータベースにすでに存在する場合はフォームがすでに送信されているので、作成しないでください。もう一度データを処理します...そうすれば、DOMを変更する必要がなく、データの整合性を確保できます。

于 2013-02-11T04:07:42.427 に答える