如何将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]仍无法在控制器中运行
答案 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');
}
});
});