Передайте атрибут HTML через ajax в бэкэнд ruby - PullRequest
0 голосов
/ 06 июня 2018

Я динамически создаю кнопки в HTML с помощью Sinatra, есть кнопка для каждого ключа в хэше в любой момент времени выполнения, может быть больше или меньше кнопок из-за изменения размера хэша.Когда я нажимаю кнопку, я хочу передать значение, связанное с этим ключом, обратно в свой бэкэнд Ruby.

Мой код Ruby:

#app.rb
require 'sinatra'
require 'net/http'
require_relative './hashmaker.rb'

enable :sessions
set :views, "views"
set :bind, '0.0.0.0'

get '/' do

    @hash = hashmaker.make_crazy_changing_hash(from_a_directory_of_files)
erb: index
end

get "/run_feature" do 
return runFeature(HashValue)

Я создал таблицу в HTML с кнопкойдля каждого хеш-ключа

    <html>
    <head>
            <title>Test</title>
            <script src="https://code.jquery.com/jquery-1.10.2.min.js"> . 
</script>
            <script src="ajax.js"></script>
            <link href="style.css" type="text/css" rel="stylesheet">
    </head>
    <body>
        <div style="overflow-x:auto;">
        <table>
                <% @hash.keys.each do |feat| %>
                <tr>
                        <td><%= feat %></td>
                <% @hash[feat].each do |elem| %>
                  <td>
                         <button class="trial-version" name=<%= elem[1] %>><%= elem[0] %></button>
                  </td>
                <% end %>
                </tr>
                <% end %>
        </table>
        </div>
    </body>
</html>

я попытался добавить значение хеша в качестве имени кнопки, затем я хочу передать это имя, используя ajax в моем методе jquery onclick, в бэкэнд Ruby /run_feature get.

Мой текущий ajax выглядит следующим образом:

  (document).ready(() => {
  $('.trial-version').on('click', () => {
        $.ajax({
                    type: "GET",
                    url: '/run_feature',
                    dataType: "script",
                    data: {HashValue: this.attr("name")}
        });
  });
});

Как правильно передать этот атрибут name в мой метод бэкэнда?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вы должны изменить значение типа данных с GET на POST

  (document).ready(() => {
  $('.trial-version').on('click', () => {
        $.ajax({
                    type: "POST",
                    url: '/run_feature',
                    dataType: "script",
                    data: {HashValue: this.attr("name")}
        });
     });
});

, а затем изменить имя функции с get '/ run_feature' do на post 'run_feature' do

0 голосов
/ 06 июня 2018

Вы должны иметь доступ к переданным данным из ajax, используя params[:link] или params['link']

...