【问题标题】:Not able to pass parameters through url in Ajax request using Rails无法使用 Rails 在 Ajax 请求中通过 url 传递参数
【发布时间】: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


【解决方案1】:

我会在这里发帖 - 我的 cmets 太长了。

尝试将{ type: 1} 添加到您的data 并将type 更改为GET。 Rails params 包含 GETPOST 数据 - 您甚至不必更改控制器。

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
    });
}

【讨论】:

  • 嗨,奥斯卡,谢谢,我刚刚尝试过,但没有成功。我再试一次
  • 实际上 Oskar 我只是注意到即使 URL 中没有参数,请求也不会通过。我用 Pry 检查了它是否到达了控制器,并确定它正在到达控制器,但也许我错了。即使没有测试参数,您能否看到请求的任何问题
【解决方案2】:

对不起,我发现了错误。这是一个愚蠢的。 我有浅嵌套路线,因此领导者嵌套在排行榜中,因此我使用了不正确的请求路径。应该是:

  $.ajax({
    type: "POST",
    url: "/leaderboards/1/leaders?test=1",
    data: { leader: { name: name, time: time } },
    success: success

  });

在抱歉浪费您的时间之前,我应该抓住这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2021-10-07
    • 2011-12-18
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多