ログアウトする前にデータを含むフォームを送信する方法は?
-
02-07-2019 - |
質問
かなり大きな入力フォーム(数百のフィールド、インベントリアプリケーション)にdocument.form.submit()関数を使用しています。ユーザーが一定時間アイドル状態になった後にこれを呼び出しています。入力したデータを保存したいと思います。これを試みると、ページがリロードされます(アクションは#)が、フィールドに入力された新しいテキストはREQUESTに渡されないため、DBに入れられません。これが発生する根本的な理由はありますか、コードがうまく一緒に再生されないのですか(EXTJSグリッドビューを使用して、アイドル時間を追跡するためのフォームとライブラリを表示しています) おかげで、 ロバート
解決
ここに答えを書いたと思います。私が見つけたのは、これを行うことです: setTimeout( 'frm.submit();'、2000); ページをリロードしましたが、フォームを送信しませんでした。私がこれをしたとき: frm.submit(); フォームが送信され、データが渡されました。最初の方法がうまくいかなかった理由はわかりませんが、それを知る必要はありません:)
他のヒント
サーバーが入力値を無効にしている可能性があります。サーバー上のページが次のようになっている場合は次のように言います:
<form action="/page.cgi">
...
<input name="Fieldx" value=""/>
</form>
フィールドを無効にすることになると思います。または、これはサーバーアクションが間接的に設定している可能性があります。 JSFでは、このようなものです。
<input name="Fieldx" value="#{bean.nullProperty}"/>
サーバーには何があり、ブラウザは何ですか?
HTML投稿リクエストをキャッチして、入力フィールドが含まれているかどうかを確認します。その場合、サーバーに問題があります。
しかし、あなたが言ったことに関しては、ブラウザがJavaScript DOMを処理する方法に矛盾があるためだと思います。これは、フォームの送信ボタンを省略して機能する場合に該当する可能性があります。
HTMLFormElement
オブジェクトの submit
メソッドは、ユーザーが送信ボタンをクリックしたかのようにフォームを送信するだけです。したがって、フォームの action
属性が#
に設定されている場合、フォームデータを同じに送信しているため、ページが更新されているように見えます。ページ。
ただし、アクション属性を別のページに設定したときに、まだ実行されるのは奇妙です。
フォームの method
属性は get
または post
に設定されていますか?