あるHTMLページから別のHTMLページに変数を渡すためのベストプラクティスは何ですか?
-
03-07-2019 - |
質問
私は比較的Webアプリケーションプログラミングに慣れていないので、この質問が誰にとっても基本的ではないことを願っています。
さまざまな食料品の説明の行で満たされたdojox datagrid(v1.2)を含むFORMでHTMLページを作成しました。ユーザーが興味のあるアイテムを選択したら、「送信」をクリックします。ボタン。
この時点で、javascript関数を取得して、アイテムID番号をjavascript変数として保存できますが、このIDを後続のHTMLページに渡す方法がわかりません。
IDをURLクエリ文字列パラメーターとして渡すだけですか?他にもっと良い方法はありますか?
編集:全体的なプロセスはショッピングカートのようなものです。ユーザーはグリッドからアイテムを選択し、次のページで詳細を入力してからチェックアウトします。
また、私はgrailsを使用しているため、これはGSPページで行われていますが、現在はHTMLのみが含まれています。
解決
非表示の入力フィールドを使用できます。フォームの一部として送信されます。
<html>
<head>
</head>
<body>
<script type="text/javascript">
function updateSelectedItemId() {
document.myForm.selectedItemId.value = 2;
alert(document.myForm.selectedItemId.value);
// For you this would place the selected item id in the hidden
// field in stead of 2, and submit the form in stead of alert
}
</script>
Your grid comes here; it need not be in the form
<form name="myForm">
<input type="hidden" name="selectedItemId" value="XXX">
The submit button must be in the form.
<input type="button" value="changeSelectedItem" onClick="updateSelectedItemId()">
</form>
</body>
</html>
他のヒント
これは良い方法ですが、JSP、PHP、ASPなどのスクリプト言語を使用することをお勧めします。簡単なPOSTメソッドとGETメソッドを使用できます。
最良の方法(imho)は、URLに含めることです。
href =&quot; http://NewPage.htm?var = value&quot ;;
encodeUriComponent文字列値
POSTを使用して変数を別のページに送信する1つの方法は、アクション属性がターゲットページであるフォームで、後続のページへのリンクを送信入力にすることです。持っているすべての変数について、属性タイプ&quot; hidden&quot;の入力を使用して含めることができます。このフォームでは、ボタンのみが表示されます。
もう1つのオプションは、基本的に現在のGETクエリを再入力するPHPのようなものでページ上のリンクを動的に生成することです。
最後に、この情報はいつでもPHPの$ _SESSION配列に保存でき、サイトナビゲーションを通じてこれらの変数を継続的に渡すことを心配する必要はありません。
選択は、同じ変数を保持したいナビゲーションオプションの数によって異なります。また、バックエンドの安全性と上級Webユーザーに開示する金額によっても異なります。
後続のページでのみIDが必要な場合は、クエリ文字列パラメーターとしてIDを渡すことができます。
しかし、より多くの情報を中継し、さまざまなパラメーターをさまざまなページに渡す必要があり、さまざまなページのさまざまなパラメーターセットを維持する必要がある場合は、少し面倒になります。この場合、フォームに非表示フィールドを保持し、各パラメーターを格納する引数オブジェクトを作成することをお勧めします。 JSONで引数オブジェクトをシリアル化し、これを非表示フィールドに保存します。フォームをサーバーにポストバックします。次のページが読み込まれたら、オブジェクトを逆シリアル化し、必要な値を取得します。
htmlページの使用に制限されていると仮定すると、クエリ文字列のidを次のページに渡すことが最善の方法だと思います。次のページのクエリ文字列からその値を引き出すのは比較的簡単です。変数の受け渡しについてもう少しステルスする必要がある場合(または変数を複数のページで保持する必要がある場合)、Cookieを設定して次のページで取得することもできます。
Grailsアプリケーションでこれを行おうとしているので、Flashスコープを使用する選択肢があります。スコープはコントローラーで定義されるため、あるHTMLページから次のHTMLページに直接移動する場合、これは意味をなさない場合があります。リクエスト間で何らかの処理を行う必要がない場合は、非表示のフォームフィールドを使用してシンプルにすることをお勧めします。