クリックされた要素のIDをキャプチャし、そのIDをコントローラーに渡します。すべて、リンクまたはURLパラメーターにIDを表示せず、カスタムajaxロードを作成する必要もありません。箱から出してレールで利用できるようなものはありますか?
2 に答える
IDをユーザーに表示したくないと想定していますが、サーバーにアクセスするには要素IDが必要です。
カスタムリクエストヘッダーを使用することもできますが、それにはAJAXアプローチが必要になります。これがJQueryのスケッチです
$("a.sends_element_id").click(function(e){
e.preventDefault();
$.ajax({
url: $(e.target).attr("href"),
type: "GET",
beforeSend: function(xhr){xhr.setRequestHeader('X-Element-ID', $(e.target).attr("id");},
success: function(result) {
// Do something here to display the page
// Eg. http://stackoverflow.com/questions/824349/modify-the-url-without-reloading-the-page
}
});
何を達成しようとしていますか(最終目標は何ですか)?ユーザーのURLでajaxを使用したり、パラメーターをエンコードしたりせずに、クライアントとサーバー間で通信したいようです。
これらの制約がある場合の通常の方法は次のとおりです。
1)クリックターゲットをフォームにラップし、IDを非表示の値に設定します。クリックしたら、フォームを投稿してください。これにはページの更新が必要になりますが、これはPOSTであるため、URLを台無しにすることはありません。
2)CookieにIDを設定し、ページを強制的に更新し、サーバーでIDを読み取り、設定を解除します。これには明らかにページの更新も必要ですが、URLには何もエンコードされません。
3)非表示のiFrameを使用して、目的のパラメータを含むURLをロードします。これは更新を必要とせず、ユーザーには表示されないため、URLは何でもかまいません。
ページの更新/変更に問題がない場合は、フォームルートがおそらく最適です。ただし、ページを更新したくない場合は、xhrリクエストが明らかに最善の解決策です。実行するのは本当に簡単ですが、iFrameソリューションはおそらくあなたのニーズも満たすハックでしょう。