2つのボタンを持つフォームを送信するためにajaxを使用しています。次に、コントローラーでparams [:commit]を使用して、どのボタンが押されたかを検出します。また、jQueryのAjaxComplete関数を使用して、フロントエンドを操作しています。私の質問は、jqueryのAjax Complete関数内でコミットボタンの値にアクセスして、コントローラーを介さずにどのボタンが押されたかがわかるようにする方法です。
たとえば、URLをチェックしてどのajaxリクエストが送信されたかを確認し、次に何らかのアクションを実行することで、同様のことをすでに行っています。次に、より詳細にドリルダウンして、ajaxリクエストで送信されているパラメーターを確認します。 (コードはcoffeescriptです)
$(document).ajaxComplete (event, xhr, settings) ->
if settings.url.indexOf('mode=2') > 0
$('#nav_tabs').show();
settings
ハンドラーに渡された
ajaxComplete
引数のドキュメントをご覧ください。
jQueryのバージョンによっては、
settings.data
POJOに直接アクセスできる場合があります。できない場合は、
settings.url
をいじってみれば、ほぼ正確に欲しいものを手に入れることができます。
たとえば、
data
オブジェクト
{ herp: "derp", karp: "larp"}
を使用して
http://www.google.comへのGETを実行していたとしましょう。このデータは、クエリパラメータとしてURLに追加されます。それをいじりましょう!
// load the URL of the request
var u = new URL(settings.url);
var params = u.search.replace("?", "").split("&").map(
function(currVal) {
var parts = currVal.split("=");
var resp = {};
resp[parts[0]] = parts[1];
return resp;
});
// params now contains an array of { key: value } mappings for the request params.
// now, lets merge them!
var merged_params = {};
for (var i : params) {
merged_params[i] = params[i];
}
// now merged_params is a POJO with the original keys&values of the data sent to the server.