0

how can I send the var lang to the controller so I can use it in partiel. here is my shot:

  $("#search-select").on("click", function() {
    var lang = $('#search-select').dropdown('get value');
    $.get({
      url: translations_url
      data: lang,
      success: function(){
        console.log('data sent');
      }
    });
  });

EDIT

current code:

  $("#search-select").dropdown();

  $("#search-select").on("click", function() {
    var lang = $('#search-select').dropdown('get value');
    $.get({
      url: "#{translations_url}",
      dataType: "script",
      data: {
        lang: lang
      }
    });
  });

problem: params[:lang] still don't work in controller

Arb
  • 77
  • 10

3 Answers3

0

Set correct _path to your post method:

$.ajax({
    url: '<%= controller_path %>', method: 'POST',
    beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
    data: { lang: lang },
    dataType: 'json',
    success: function (data) {
      console.log(data);
    }
});

Now you can work with lang in your controller

def method
  params[:lang] # do something
  answer = 'Then, you can return some data to view'
  respond_to do |format|
    format.json { render json: answer }
  end
end
Michael Arkhipov
  • 737
  • 8
  • 19
0

you're missing , after url: translations_url, also if you can send data as JSON with key and value, like data: {lang: 'value'}, also you don't need to specify method name if you're using GET, see the below example

$.ajax({
  url: translations_url,
  data: {lang: 'value'},
  success: function(){
    console.log('data sent');
  }
});

if you need to use POST Method then include method: 'post' incase jquery ajax method doesn't call js.erb file you need to add dataType: 'script'

Ravi Mariya
  • 1,210
  • 15
  • 19
-1

You can't use route path helpers on the frontend. But you can send proper URL from backend to frontend via data-attribute:

#search-select{ data: { path: translations_url } }

And then in your js:

$("#search-select").on("click", function() {
    var url = $(this).data('path'),
        data = { lang: $(this).dropdown('get value') };

    $.get({
      url: url,
      data: data,
      success: function(){
        console.log('data sent');
      }
    });
});
taras
  • 1,239
  • 1
  • 10
  • 16