将数据从视图发送到控制器AJAX

时间:2018-05-18 13:23:37

标签: ruby-on-rails ajax

如何将var lang发送到控制器,以便我可以在partiel中使用它。这是我的镜头:

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

修改

当前代码:

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

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

问题:params [:lang]仍无法在控制器中运行

3 个答案:

答案 0 :(得分:0)

将正确的_path设置为帖子方法:

$.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);
    }
});

现在,您可以在控制器中使用lang

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

答案 1 :(得分:0)

你错过了url:translations_url之后,如果你可以像J {data: {lang: 'value'}一样发送带有密钥和值的JSON数据,如果你使用{{{}},你也不需要指定方法名称。 1}},见下面的例子

GET

如果你需要使用POST方法然后包含$.ajax({ url: translations_url, data: {lang: 'value'}, success: function(){ console.log('data sent'); } }); ,则jquery ajax方法不会调用js.erb文件,你需要添加method: 'post'

答案 2 :(得分:-1)

您不能在前端使用路径路径助手。但您可以通过data-attribute:

从后端向前端发送正确的URL
#search-select{ data: { path: translations_url } }

然后在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');
      }
    });
});