我试图通过确认对话触发的Ajax请求中的url传递参数。我想在成功请求的情况下在我的Rails控制器中获取该参数的值,但我还没有能够做到。
到目前为止,我已尝试过以下代码:
这是我的Ajax请求,我在网址中添加了参数以及数据中的其他参数
function continueSave() {
var name = $('#leader_name').val();
var persisted_time = $('#leader_time').val();
$.ajax({
type: "POST",
url: "/leaderboards/1/?test=1",
data: { leader: { name: name, time: time } },
success: success
});
}
这里是与对话相关的JS
function nameAlert() {
return confirm("Name already exists. Would you like to continue?");
};
(function() {
if (nameAlert()) {
continueSave();
}
else {
//something else here
}
})();
虽然请求成功到达控制器,但控制器中的参数[:test]为零。
我还尝试在数据中传递测试参数,但它也无法正常工作。
会感激一些帮助。
相关的控制器操作(leaders_controller.rb)
def create
@leader = Leader.new(leader_params)
@leader.leaderboard_id = @leaderboard.id
@name_repeated = !@leaderboard.leaders.find_by(name: @leader.name).nil?
@check = params[:test]
if params[:test].nil? && @name_repeated == true
render :template => 'leaders/repeated_name.js.erb'
else
@leader.save
@rank = @leader.rank_in(@leaderboard)
respond_to do |format|
if @leader.save
format.html { redirect_to root_path }
format.js { }
else
end
end
end
end
注意: 1.-' leaders / repeated_name.js.erb'包含Ajax请求的代码 2.-在路线中Leader资源嵌套在Leaderboard资源
中答案 0 :(得分:1)
对不起家伙我发现了这个错误。这是一个愚蠢的。 我有浅层嵌套路由,因此领导者嵌套在排行榜中,因此我使用了不正确的路径来处理请求。它应该是:
$.ajax({
type: "POST",
url: "/leaderboards/1/leaders?test=1",
data: { leader: { name: name, time: time } },
success: success
});
在对不起浪费你的时间之前我应该抓住了。
答案 1 :(得分:0)
我会在这里发帖 - 我的评论太长了。
尝试将{ type: 1}
添加到data
并将type
更改为GET
。 Rails params
包含GET
和POST
数据 - 您甚至不需要更改控制器。
function continueSave() {
var name = $('#leader_name').val();
var persisted_time = $('#leader_time').val();
$.ajax({
type: "GET",
url: "/leaderboards/1/",
data: { leader: { name: name, time: time }, test: 1 },
success: success
});
}