0

私は CGI::FormBuilder を使用する既存のコードに取り組んでおり、これがどのように機能するかを確認するためにすべてのドキュメントに目を通しましたが、100% うまくいくとは確信していません。コードには、いくつかの自由形式のフィールドと、更新、キャンセル、およびテストの 3 つのボタンがあります。テスト ボタンは、フィールドに入力された設定を使用して電子メールを送信します。

フォームの JS では、"Test" をクリックしたときに ajax 呼び出しを使用して、フォーム内の perl コードが実行されるようにします。フォームが送信されると想定されるように、更新ボタンとキャンセル ボタンが返されます。この理由は、テスト メールが送信されたときに、ユーザーが返されたページに移動するのではなく、値がそのままの状態でフォームに残り、値が正しい場合にユーザーが実際の値を更新する場合は、それらを再入力する必要があります (これにより、DB の値が更新されます)。どうやら、フォームは「送信」されていないため、この「テスト」で使用しようとする値は、ページが開いたときにフォームに読み込まれた値です。テストボタン。これを実現する方法はありますか?

長い質問の短い: CGI::FormBuilder を使用して、ページを送信せずに PERL 経由で現在フィールドにある値を取得できますか? ありがとう!

4

2 に答える 2

1

簡単な答え: はい。

中程度の回答: はい。ページで JavaScript を使用して、サーバー側アプリケーションに情報を送信できます。

長い答え:

サーバー側とクライアント側のコードが Web ページとやり取りする方法について、混乱しているようです。これはかなり一般的です。多くの人は、レンダリングされたページとそれを生成したプログラムとの間の何らかの通信であることを期待しています。AJAX と関連技術は、ここでの境界線を曖昧にし、物事をより混乱させます。

シンプルで昔ながらの CGI フォームのタイムラインを次に示します。

  • クライアントリクエストページ。サーバーがページ要求を受け取ります。サーバーは CGI スクリプトにディスパッチします。
  • サーバーは CGI スクリプトを実行します。
  • サーバーは CGI スクリプトの結果をクライアントに送信します。
  • クライアントはスクリプトの結果をレンダリングします。
  • ユーザーがフォームに入力します。
  • ユーザーは「送信」をクリックします。パラメータ情報を含むクライアント要求ページ (詳細は、要求のタイプ、フォーム構成によって異なります)。
  • サーバーがページ要求を受け取ります。
  • サーバーは CGI スクリプトにディスパッチします。
  • サーバーは CGI スクリプトを実行します。サーバーは CGI スクリプトの結果をクライアントに送信します。クライアントはスクリプトの結果をレンダリングします。

クライアントからの各メッセージは個別に処理されます。

AJAX を使用すると、現在読み込まれているページをクリアせずに、サーバーにメッセージを送信して応答を取得できます。

したがって、いくつかの JavaScript コードを html に挿入し、AJAX 要求を作成してデータをサーバーに返す onModify ハンドラーをセットアップするだけです。AJAX リクエストは、上記と同様に単なる別の HTTP リクエストですが、バックグラウンドで実行されます。必要なのは、送信されたデータをキャッチして応答することだけです。あなたのJavaScriptは応答をキャッチし、それに対して何かをする必要があります.

于 2013-01-30T21:54:49.387 に答える
0

短い質問に対する答えは「いいえ」です。

長い質問への答えは「はい」です。

「送信」と「テスト」の 2 つの「送信」ボタンがあれば十分です。テストによる送信はフォームを CGI に送信し、CGI はフィールドの値のみを検証し、同じフォームを同じ値でレンダリングし、フィールドにエラーがある場合はメッセージを返します。

于 2013-01-30T22:26:59.563 に答える