jquery - Rails Ajaxはフォームパラメータを検出します

原文 jquery ajax ruby-on-rails-4

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.
関連記事

javascript - AJAXは前の値を配列で返します

jquery - jqueryはiframe htmlを変更しません

javascript - カスケードされた選択ボックスでデータベースからデータをフェッチする

jquery - 要素がホバーしたときの背景画像の遷移

javascript - jQueryスピン関数-画像クリック時に20%スピンを指定しますか?

jquery - ホバーに画像を表示するようにボディの背景を変更すると、ページの下部に画像の残りが残ります-なぜですか?

javascript - ウェブサイトページへのリンクをチェックしたら、2つのドロップダウンオプションを作成する方法

javascript - 剣道ウィンドウのコンテンツURLからクエリ文字列を取得する

javascript - jScrollPaneがコンテンツの更新後に下にスクロールしない

javascript - この関数getElementsByClassNameがIE7、8で機能しないのはなぜですか? [重複]