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



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

$("#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
}
});
});

问题:参数[:lang] 在控制器中仍然不起作用

为您的发布方法设置正确的_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

你缺少,在url:之后translations_url,另外,如果你可以用键和值将数据作为JSON发送,比如data: {lang: 'value'},如果你使用GET,也不需要指定方法名,见下面的示例

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

如果您需要使用 POST 方法,请包括method: 'post'以防 jquery ajax 方法不调用 js.erb 文件,您需要添加dataType: 'script'

不能在前端使用路由路径帮助程序。但是您可以通过数据属性将正确的 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');
}
});
});

最新更新