我正在尝试通过由确认对话框触发的 Ajax 请求中的 url 传递参数。我想在请求成功后在 Rails Controller 中获取该参数的值,但我无法做到这一点。
到目前为止我已经尝试过以下代码:
这是我的 Ajax 请求,我在 URL 中添加了参数,并在数据中添加了其他参数
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
}
})();
虽然请求成功到达 Controller ,但 Controller 中的 params[:test] 为 nil。
我也尝试过在数据中传递测试参数,但它也不起作用。
希望得到一些帮助。
相关 Controller 操作 (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.- 在 route ,Leader 资源嵌套在 Leaderboard 资源中
最佳答案
对不起大家,我发现了错误。这是一个愚蠢的。 我有浅层嵌套路由,因此领导者嵌套在排行榜中,因此我使用了错误的请求路径。应该是:
$.ajax({
type: "POST",
url: "/leaderboards/1/leaders?test=1",
data: { leader: { name: name, time: time } },
success: success
});
我应该在之前就发现这一点,抱歉浪费了你的时间。
关于javascript - 无法使用 Rails 在 Ajax 请求中通过 url 传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41116552/