【发布时间】:2017-04-28 05:53:43
【问题描述】:
我正在尝试通过确认对话触发的 Ajax 请求中的 url 传递参数。给定一个成功的请求,我想在我的 Rails 控制器中获取该参数的值,但我无法做到。
到目前为止我已经尝试了以下代码:
这是我的 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
}
})();
虽然请求成功到达控制器,但控制器中的 params[:test] 为 nil。
我也尝试通过数据中的测试参数,但它也不起作用。
不胜感激。
相关控制器操作 (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 资源中
【问题讨论】:
-
尝试使用请求标头 - 标头:{ "Accept" : "application/json", "Content-Type" : "application/json" }
-
谢谢鲁本。我刚刚开始尝试使用 Ajax,所以恐怕我什至不知道该怎么做。如果您有几分钟的空闲时间,您能否提供进一步的指导?
-
您只需将该属性添加到您的请求对象中: $.ajax({ type: "POST", url: "/leaderboards/1/?test=1", headers : { "Accept " : "application/json", "Content-Type" : "application/json" }, data: { leader: { name: name, time: time } }, success: success });
-
也许您可以使用
type: "GET"并通过GET传递您的所有数据?请向我们展示与此相关的控制器代码。 -
谢谢鲁本 我已经尝试过标题但结果相同。发布请求通过但 url 中没有参数。 Oskar 我已按要求发布了我的控制器的相关位。 GET 请求不会通过,因为我正在发布数据,对吧?
标签: javascript jquery ruby-on-rails ajax