【问题标题】:Creating params hash via ajax post method通过 ajax post 方法创建参数哈希
【发布时间】:2017-01-03 16:07:01
【问题描述】:

所以我想创建一个自定义参数哈希,但我不知道该怎么做。我创建了一个红宝石哈希(有点)。我没有其他想法

$("#bt-dw , #bt-up").click(function (event) {
  event.preventDefault();
  var id =  $(this).parent().attr("value");
  var up = $(this).attr("value");

  $.ajax({
    type: "POST",
    url: "/vote",
    data: "{:entry_id => '" + id + "',:up => '" + up + "'}",
    success: function () {
      console.log("post successful");
    },
    error: function () {
      console.log("post unsuccessful");
    }
  });
})

后控制器

post '/vote' do
  @entry = Entry.get!(params[:entry_id]) rescue halt(404)
  @entry.vote(request.ip, params[:up] != 'false')
end

【问题讨论】:

  • 在您的 ruby​​ 控制器中,您期望的 params 对象的结构是什么?我可以告诉你,你目前的方法行不通。如果在请求的 url 中找到字符串 {:entry_key => "<id>", :up => "<id>"},Ruby 不仅会将其评估为哈希值。在参数中传递值有一种特殊的语法:http://localhost:9292/route?key=val&other_key=otherval
  • 但是结构localhost:9292/route?key=val&other_key=otherval不是只适用于get请求吗?
  • 刚刚把我的控制器放在上面

标签: ruby ajax sinatra params


【解决方案1】:

因此,从您的评论看来,您只是在创建一个单级 params 哈希。

如果您想发送一个数组或散列作为参数值,这会稍微复杂一些。

有两种方法可以解决这个问题。

选项 1:在 ajax 请求中将此值用于 data

data: { entry_id: id, up: up }

选项 2:在 url 中而不是在 data 中包含相同的信息:

url: `/vote?entry_id=${id}&up=${up}`

请注意,我在这里使用的是 ES6 模板字符串;这相当于:

url: ( "/vote?entry_id=" + id + "&up=" + up )

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 2021-10-21
    • 2017-01-13
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多